本文共 1889 字,大约阅读时间需要 6 分钟。
从MySQL5.5开始,MySQL以插件的形式支持半同步复制,mysql三种复制模式,异步复制,全同步复制,半同步复制。MySQL默认的复制即是异步的
异步复制(Asynchronous replication) MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果从掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。全同步复制(Fully synchronous replication)
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。半同步复制(Semisynchronous replication)
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。半同步复制的安装部署
要想使用半同步复制,必须满足以下几个条件:首先加载插件
因用户需执行INSTALL PLUGIN, SET GLOBAL, STOP SLAVE和START SLAVE操作,所有用户需有SUPER权限。 主: mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’; 从: mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;查看插件是否加载成功
mysql> show plugins; rpl_semi_sync_master rpl_semi_sync_slave启动半同步复制
在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步 主: mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; 单位毫秒 如果超时会自动转换为异步模式 从: mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;以上的启动方式是在命令行操作,也可写在配置文件中。
主: plugin-load = rpl_semi_sync_master=semisync_master.so rpl_semi_sync_master_enabled = 1 rpl_semi_sync_master_timeout = 1000 从: plugin-load=rpl_semi_sync_slave = semisync_slave.so rpl_semi_sync_slave_enabled = 1在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制
plugin-load = “rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so” rpl-semi-sync-master-enabled = 1 rpl-semi-sync-slave-enabled = 1重启从上的IO线程
mysql> STOP SLAVE IO_THREAD; mysql> START SLAVE IO_THREAD; 如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。 查看半同步是否在运行 主: mysql> show status like ‘Rpl_semi_sync_master_status’; 从: mysql> show status like ‘Rpl_semi_sync_slave_status’;转载地址:http://rkrpb.baihongyu.com/