首页 > InnoDB Plugin, MySQL > MySQL5.5复制/同步的新特性及改进

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;

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

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 控制转换的方向。

Related posts:

  1. MySQL 5.5 Released(非GA)
  2. MySQL5.5新特性
  3. MySQL5.6发布及其新特性
  4. MySQL5.4引起的一些争议
  5. MySQL5.5与MySQL5.1 性能(比较)对比测试
  6. 竞争给MySQL带来的压力和动力
  7. 致歉好耶开发人员
  8. InnoDB plugin 1.0.7
  1. jcr
    2011年1月1日17:15 | #1

    跳过指定复制事件
    —————-
    关于环形复制,我有个疑问想问下。
    就是当一个节点故障时,下游的节点会change master到上游的节点,但是这时候master_log_file和master_log_pos都会改变(故障节点和他上游节点很有可能binlog不一致),但是我测试了一下,只需要在下游节点“change master to master_host=’上游节点’,IGNORE_SERVER_IDS=(故障节点);” 即可,并且会自动识别出上有节点出故障时的logfile和logpos,那么作为下游的节点是如何知道这个的呢?

  2. 2011年1月6日17:26 | #2

    jcr :

    跳过指定复制事件
    —————-
    关于环形复制,我有个疑问想问下。
    就是当一个节点故障时,下游的节点会change master到上游的节点,但是这时候master_log_file和master_log_pos都会改变(故障节点和他上游节点很有可能binlog不一致),但是我测试了一下,只需要在下游节点“change master to master_host=’上游节点’,IGNORE_SERVER_IDS=(故障节点);” 即可,并且会自动识别出上有节点出故障时的logfile和logpos,那么作为下游的节点是如何知道这个的呢?

    IGNORE_SERVER_IDS=(故障节点) 只是单纯的跳过指定节点的所有复制事件。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.