IT技术博客大学习 共学习 共进步

MySQL5.5复制/同步的新特性及改进

    半年之前我有幸参加了MySQL2010用户大会,Oracle/Sun在会上公布了MySQL5.5的新特性,这次MySQL5.5改进的地方非常之多,当中引入的Google patch for MySQL中的半同步Semi-synchronous Replication,一个可用于高可用解决方案的新特性。谭俊青@MySQL实验室

    MySQL5.5的在复制/同步方面的改进:

保证主从服务器上数据的一致性(同步)能立检测到复制的异常Crashed Salve能自动从错误中恢复同步在环形复制中用户能够指定跳过某实例事件主从复制中能自动适应字段类型的转换

    MySQL半同步复制(semi-synchronous replication)

默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。
Master:
INSTALL PLUGIN ‘rpl_semi_sync_master’ SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN ‘rpl_semi_sync_slave’ SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled=1;

    默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。

    MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。

    Master:

    INSTALL PLUGIN ‘rpl_semi_sync_master’ SONAME ‘semisync_master.so’;

    SET GLOBAL rpl_semi_sync_master_enabled=1;

    SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)

    Slave:

    INSTALL PLUGIN ‘rpl_semi_sync_slave’ SONAME ‘semisync_slave.so’;

    SET GLOBAL rpl_semi_sync_slave_enabled=1;

    复制心跳(用户检测复制是否中断)

    MySQL5.5提供的新的配置master_heartbeat_period,能够在复制停止工作和出现网络中断的时候帮助我们迅速发现问题。

    启用方法:

    STOP SLAVE;

    CHANGE MASTER TO master_heartbeat_period= milliseconds;

    START SLAVE;

    Slave自动恢复同步

    在MySQL5.5版本之前,MySQL Slave实例在异常终止服务之后,可能导致复制中断,并且relay binlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。

    跳过指定复制事件

    在多Master或环形复制的情况下,处于复制链条中间的服务器异常,可以通过

    CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y

    跳过出问题的MySQL实例。

    自动转换字段类型

    MySQL5.1在基于语句的复制下,支持部分的字段转换,但是行级的会报错。MySQL5.5语句和行级复制都已支持。还可以通过 SLAVE_TYPE_CONVERSIONS 控制转换的方向。

建议继续学习

  1. 关于IO的同步,异步,阻塞,非阻塞 (阅读 16,424)
  2. vim的复制粘贴小结 (阅读 7,863)
  3. mysql 主从同步原理 (阅读 6,483)
  4. 消息分发的同步均衡策略 (阅读 6,064)
  5. 五款最好的免费同步软件 (阅读 4,704)
  6. VIM复制粘贴的那些事 (阅读 4,704)
  7. 大量小文件的实时同步方案 (阅读 4,484)
  8. redis源代码分析 - replication (阅读 4,342)
  9. MySQL复制的概述、安装、故障、技巧、工具 (阅读 4,262)
  10. 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读 4,103)