之前写了一篇《MySQL5.6 crash-safe replication》 ,但在Mariadb10.0.X和10.1.X上不支持relay_log_info_repository = TABLE参数,官网建议用GTID复制模式代替传统复制模式,传统复制模式是不支持Slave Crash-Safe的。

MariaDB 10 Slave Crash-Safe需转为GTID复制模式_第1张图片


在mysql库下,会有一张gtid_slave_pos表(在安装初始化时,就已经是innodb引擎)

START TRANSACTION;
-- Statement 1
-- ...
-- Statement N
-- Update replication info
COMMIT;

这样sql线程执行完事务后,立即会更新gtid_slave_pos表,如果在更新过程中宕机,事务会回滚,gtid_slave_pos表并不会记录同步的点,下次重新同步复制时,从之前的POS点再次执行。


MariaDB 10默认是传统复制,如果转为GTID复制很简单,并不需要像MySQL5.6那样,要在Slave从库上设置log_slave_updates = 1(增加从库的IO压力),并重启数据库生效那么麻烦。MariaDB支持热切换GTID,你可以先以传统复制搭建主从,然后再热切GTID复制模式,如下图: 

MariaDB 10 Slave Crash-Safe需转为GTID复制模式_第2张图片

MariaDB 10 Slave Crash-Safe需转为GTID复制模式_第3张图片

通过几个简单的步骤,Slave从库就支持了Crash-Safe。


注:MHA0.56(最新版),还不支持MariaDB10的GTID复制模式,在故障切换时,还会以传统复制搭建主从,所以需要每次手工热切换下GTID模式。


参考官网:

MariaDB 10 Slave Crash-Safe需转为GTID复制模式_第4张图片