: 1 Duplicates: 0 Warnings: 0
mysql>
去slave(192.168.52.130)上查询下,看表数据是否同步过来,看到数据已经同步过来了,如下所示:
mysql> select * fromuser_db.master_test;
+---+---+
| a | b |
+---+---+
| 1 | a |
+---+---+
1 row in set (0.06 sec)
mysql>
5,如何添加新的slave服务器总结
如果master运行很久了,需要添加新的slave服务器,那么搭建新的slave,此时,有几种方法可以使slave从另一个服务开始,例如,从master拷贝数据,从另一个slave克隆,从最近的备份开始一个slave。Slave与master同步时,需要三样东西:
(1)master的某个时刻的数据快照;
(2)master当前的日志文件、以及生成快照时的字节偏移。这两个值可以叫做日志文件坐标(log file coordinate),因为它们确定了一个二进制日志的位置,你可以用SHOW MASTER STATUS命令找到日志文件的坐标;
(3)master的二进制日志文件。
也可以通过以下几中方法来克隆一个slave:
(1) 冷拷贝(cold copy)
停止master,将master的文件拷贝到slave;然后重启master。缺点很明显。
(2) 热拷贝(warm copy)
如果你仅使用MyISAM表,你可以使用mysqlhotcopy拷贝,即使服务器正在运行。
如果有myisam和innodb表,可以在业务低峰期用tar包的方式来热拷贝。
(3) 使用mysqldump
使用mysqldump来得到一个数据快照可分为以下几步:
<3.a>锁表:如果你还没有锁表,你应该对表加锁,防止其它连接修改数据库,否则,你得到的数据可以是不一致的。如下:
mysql> FLUSH TABLES WITH READ LOCK;
<3.b>在另一个连接用mysqldump创建一个你想进行复制的数据库的转储:
见4.2.1小节
<3.c>对表释放锁。
mysql> UNLOCK TABLES;
(4) 使用xtrabackup
使用xtrabackup得到数据快照,见4.2.2小节
6,如何实现MSS
当设置log_slave_updates时,你可以让slave扮演其它slave的master。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它。如下图6.png所示:

7,复制过滤
复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:在master上过滤二进制日志中的事件;在slave上过滤中继日志中的事件。如下图7.png所示:
?

8,常用的mysql主从拓扑结构
复制的体系结构有以下一些基本原则:
(1) 每个slave只能有一个master;
(2) 每个slave只能有一个唯一的服务器ID;
(3) 每个master可以有很多slave;
(4) 如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新。
MySQL不支持多主服务器复制(MultimasterReplication)——即一个slave可以有多个master。但是,通过一些简单的组合,我们却可以建立灵活而强大的复制体系结构。
9,mysql主从同步之间的管理
介绍一下基本的mysql主从的管理操作命令:
9.1 停止mysql从服务
STOP SLAVE IO_THREAD; #停止IO进程
STOP SLAVE SQL_THREAD; #停止SQL进程
STOP SLAVE; #停止IO和SQL进程
9.2 开启mysql主从同步服务
START SLAVE IO_THREAD; #启动IO进程
START SLAVE SQL_THREAD; #启动SQL进程
START SLAVE; #启动IO进程和SQL进程
9.3 重置mysql主从同步
RESET SLAVE;
#用于让从属服务器忘记其在主服务器的二进制日志中的复制位置, 它会删除master.info和relay-log.info文件,以及所有的中继日志,并启动一个新的中继日志,当你不需要主从的时候可以在从上执行这个操作。不然以后还会同步,可能会覆盖掉你的数据库。
9.4 查看主从同步状态
SHOW SLAVE STATUS;
#这个命令主要查看Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_Master、Last_IO_Error、Last_SQL_Error这些值来把握复制的状态。
9.5 临时跳过MYSQL同步错误
#经常会朋友mysql主从同步遇到错误的时候,比如一个主键冲突等,那么我就需要在确保那一行数据一致的情况下临时的跳过这个错误,那就需要使用SQL_SLAVE_SKIP_COUNTER = n命令了,n是表示跳过后面的n个事件,比如我跳过一个事件的操作如下:
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
9.6 从指定位置重新同步数据
#有的时候主从同步有问题了以后,需要从log位置的下一个位置进行同步,相当于跳过那个错误,这时候也可以使用CHANGE MASTER命令来处理,只要找到对应的LOG位置就可以,比如:
CHANGE MASTER TOMASTER_HOST='10.1.1.75',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=106;
START SLAVE;
PS:生产环境中这种操作尽量能避免就避免。
10,线上维护mysql主从需要注意的事项
1. 不要乱使用SQL_SLAVE_SKIP_COUNTER命令。
这个命令跳过之后很可能会导致你的主从数据不一致,一定要先将指定的错误记录下来,然后再去检查数据是否一致,尤其是核心的业务数据。
2. 结合percona-toolkit工具pt-table-checksum定期查看数据是否一致。
这个是DBA必须要定期做的事情,呵呵,有合适的工具何乐而不为呢?另外percona-toolkit还提供了对数据库不一致的解决方案,可以采用pt-table-sync,这个工具不会更改主的数据。还可以使用pt-heartbeat来查看从服务器的复制落后情况。
3. 使用replicate-wild-ignore-table选项而不要使用replicate-do-db或者replicate-ignore-db。
原因已经在上面做了说明。
4. 将主服务器的日志模式调整成mixed。
5. 每个表都加上主键,主键对数据库的同步会有影响尤其是居于ROW复制模式。