今天回家重新看了看《高性能MySQL》这本书里面复制一节,每次看都有不同的收获,这里把我自己觉得比较重要的一些点罗列出来,大家可以温故知新一下:
1、MySQL复制大部分是向后兼容的,高版本的服务器可以作为低版本服务器的备库。这个方法通常被用来在MySQL版本升级的时候用,例如一个5.5版本的mysql作为主库,可以搭建一个5.7版本的从库,待从库稳定运行之后,可以再来一个级联的5.7版本,形成5.5-->5.7--->5.7的复制关系,最后断掉第一个5.5,这就完成了版本迁移;
2、log_slave_update这个参数一般用来允许从库将自己的重做的事件也记录到自身的二进制日志中,从而可以成为新的主库。
3、主从关系确立之后,我们使用show processlist在主库上,可以看到一个dump线程,在从库上可以看见两个线程,一个IO线程一个SQL线程,注意这两个线程的time字段,IO线程的time字段指的是主从关系已经搭建的时间,而SQL线程的time字段指的是SQL线程目前空闲的时间。这两个线程在从库的用户都是system user;
4、推荐在复制的时候设置sync_binlog=1这个参数,这样MySQL在每次提交事务之前会将二进制日志同步到磁盘上,保证在服务器崩溃时候数据不会丢失。
5、从库上使用skip_slave_start参数能够阻止从库在崩溃后自动启动复制;
6、如果从库与主库的延迟比较大,从库的IO线程可能会写很多中继日志,可能会挤爆磁盘,这个时候可以通过配置relay_log_space_limit变量,如果中继日志的大小大于这个标量的值,会暂时停下IO线程;
7、如果不是必须,请不要使用binlog_do_db或者replicate_do_db以及binlog_ignore_db或者replicate_ignore_db之类的参数,这些参数在复制的过程中容易出现问题,例如:
use test;
delete from aaa.film;
当我们使用上面的参数控制aaa这个数据库,然后使用这样的一个SQL操作,其结果是都会在test数据库上过滤delete表,而不是在我们想要的aaa数据库里面,这里需要特别注意。