MySQL优化之――复制(四)

2015-07-24 08:18:46 · 作者: · 浏览: 4
置从机的同步的时候本人写错了标点符号,.号写成。号

?

master_log_file='binlog。000004',

?

这时候,我们可以在从机上面执行show processlist来查询从服务器的进程状态

?

mysql> show processlist \G
*************************** 1. row ***************************
     Id: 4
   User: root
   Host: localhost:60968
     db: information_schema
Command: Sleep
   Time: 3613
  State:
   Info: NULL
*************************** 2. row ***************************
     Id: 5
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 3613
  State: Waiting for master to send event
   Info: NULL
*************************** 3. row ***************************
     Id: 6
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 2769
  State: Slave has read all relay log; waiting for the slave I/O thread to update it
   Info: NULL
*************************** 4. row ***************************
     Id: 7
   User: root
   Host: localhost:61007
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
4 rows in set (0.04 sec)

?

结果表明slave已经连接上master,开始接收并执行日志

relay-log.info文件里面的内容
.\Steven-PC-relay-bin.000002
250
binlog.000005
107
7 

relay-log.info文件里面记录了slave端的relaylog的当前文件名和位置,还有master端的binlog文件名和位置

\


Windows环境下主从复制测试

1、在master端的mysql环境下,执行下面命令

?

use test;
create table rep_test(data integer);

insert into rep_test values(2);

?

2、在slave端的mysql环境下,查看主机刚才添加的表和数据是否成功同步到从机上
use test;

show tables;

select * FROM REP_TEST;

\

\

测试表明,数据已经成功地同步到slave上,实验中只是用到了主从同步,在实际生产环境中MYSQL架构可能会用到一主多从的架构


MYSQL主要复制启动选项

(1)log-slave-updates

log-slave-updates这个参数主要用来配置从服务器的更新是否写入二进制日志,该选项默认是不打开的,如果这个

从服务器同时也作为其他服务器的主服务器,搭建一个链式的复制,那么就需要开启这个选项,这样从服务器才能获取他

的二进制日志进行同步操作

(2)master-connect-retry

master-connect-retry这个参数用来设置和主服务器连接丢失的时候进行重试的时间间隔,默认是60秒

(3)read-only

read-only是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对

从数据库进行更新操作。如果主数据库创建了一个普通用户,在默认情况下,该用户是可以更新从数据库的数据的,如果

使用read-only选项启动从数据库以后,用户对从数据库进行更新时会提示错误

Linux下启动mysql例子

?

[root@localhost~]#mysqld_safe -read-only

?

(4)slave-skip-errors

在复制过程中,从服务器可以会执行BINLOG中的错误SQL语句,此时如果不忽略错误,从服务器会停止复制进程,等待用户处理错误。

这种错误如果不能及时发现,将会对应用或者备份产生影响。slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动

跳过的错误号,设置该参数后,mysql会自动跳过所配置的一系列错误,直接执行后面的SQL语句,该参数可以定义多个错误号,如果

设置成all,则表示跳过所有的错误,在my.ini或者my.cnf里配置如下

?

slave-skip-errors=1007,1051,1062

?

如果从数据库主要作为主库的备份,那么就不应该使用这个启动参数,因为一旦设置不当很可能造成主从库的数据不同步。

如果从库仅仅是为了分担主库的查询压力,并且对数据的完整性要求不高,那么这个选项可以减轻DBA维护从库的工作量


查看slave的复制进度

很多情况下,用户都想知道从服务器复制的进度,从而判断从服务器上复制数据的完整性,同时判断是否需要手工来做

主从同步工作。

事实上,用户可以通过show processlist列表中的Slave_SQL_Running线程的Time值得到,他记录了从服务器当前执行的SQL时间戳

和系统时间之间的差距,例如下面的例子

?

  Id: 6
   User: system user
   Host:
     db: NULL
Command: Connect
   Time: 2769
  State: Slave has read all relay log; waiting for the slave I/O thread to update it
   Info: NULL

?

Time时间说明从服务器最后执行的更新操作大概是主服务器2769秒前的更新操作


日常管理和维护

复制配置完成后,DBA需要进行日常的监控和管理维护工作,以便能够及时发现问题和解决问题

以保证主从数据库能够正常工作。

1、了解服务器的状态

一般使用show slave status命令来检查从服务器

在查看服务器信息中,首先要查看下面的两个进程是否为YES。

?

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

?

Slave_IO_Running表明此进程是否能够由从服务器到主服务器上正确地读取binlog日志,并写入到从服务器的中继日志中

Slave_SQL_Running表明此进程能否读取并执行中继日志中的binlog信息

2、服务器复制出错原因

问题一:出现“log event entry exceeded max_allowed_pack”错误

如果在应用中使用大的BLOB列或CLOB列或者长字符串,那么在从服务器上回复时,可能会出现

“log event entry exce