mysql 半主从复制

原理

为了提升数据安全,MySQL让Master在某一个时间点等待Slave节点的 ACK(Acknowledge character)消息,接收到ACK消息后才进行事务提交,这也是半同步复制的基础,MySQL从5.5版本开始引入了半同步复制机制来降低数据丢失的概率。

介绍半同步复制之前先快速过一下 MySQL 事务写入碰到主从复制时的完整过程,主库事务写入分为 4个步骤:

  • InnoDB Redo File Write (Prepare Write)
  • Binlog File Flush & Sync to Binlog File
  • InnoDB Redo File Commit(Commit Write)
  • Send Binlog to Slave

当Master不需要关注Slave是否接受到Binlog Event时,即为传统的主从复制
当Master需要在第三步等待Slave返回ACK时,即为 after-commit,半同步复制(MySQL 5.5引入)。
当Master需要在第二步等待 Slave 返回 ACK 时,即为 after-sync,增强半同步(MySQL 5.7引入)。

下图是 MySQL 官方对于半同步复制的时序图,主库等待从库写入 relay log 并返回 ACK 后才进行 Engine Commit。
mysql 半主从复制_第1张图片

master库操作

使用命令select @@have_dynamic_loading;查看数据库是否支持动态插件安装功能
mysql 半主从复制_第2张图片
使用命令show plugins;查看插件
mysql 半主从复制_第3张图片
使用命令 install plugin rpl_semi_sync_master soname ‘semisync_master.so’;安装插件

使用命令show variables like '%semi%'查看相关参数
mysql 半主从复制_第4张图片
开启插件并设置超时
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_wait_for_slave_count=1000;
mysql 半主从复制_第5张图片
相关参数也可以在my.cnf中进行配置

# 自动开启半同步复制 
rpl_semi_sync_master_enabled=ON 
rpl_semi_sync_master_timeout=1000

slave库操作

使用命令install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;安装从库插件,并查看相关得参数以及设置开启semi参数。
mysql 半主从复制_第6张图片
停止并重启stop slave;start slave;
查看/var/log/mysqld.log中得日志能发现Semi-sync得信息。
mysql 半主从复制_第7张图片
相关参数也可以在my.cnf中进行配置

# 自动开启半同步复制 
rpl_semi_sync_slave_enabled=ON 

你可能感兴趣的:(系统)