码迷,mamicode.com
首页 > 其他好文 > 详细

半同步复制

时间:2014-08-21 19:00:34      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:使用   io   数据   ar   art   问题   log   ad   

在mysql5.5之前,mysql复制是异步操作,主库和从库的数据之间存在一定的延迟,这样存在一个隐患,当主库上写入一个事物并提交成功,而从库尚未得到主库推送的binlog日志时,主库宕机了,例如主库可能因为磁盘损坏,内存故障等造成主库上该事务binlog丢失,此时,从库就可能损失这个事务,从而造成主从不一致

为了解决这个问题,mysql5.5引入了半同步复制机制,在mysql5.5之前的异步复制时,主库执行完commit提交操作后,在主库写入binlog日志后即成功返回客户端,无需等待binlog日志传送给从库。

半同步复制时,为了保证主库上的每一个binlog事务都能够被可靠的复制到从库上,主库在每次事物成功提交时,并不及时反馈给前段应用用户,而是等待其中一个从库也接收到binlog事务并成功写入中继日志后,主库才返回commit操作成功给客户端。半同步复制保证了事务成功提交后,至少有两份日志记录,一份在主库的binlog,另一份在至少一个从库的中继日志relaylog上,从而更近一步保证了数据的完整性

 

 

半同步模式是作为mysql5.5的一个插件来实现的,主库和从库使用不用的插件,安装比较简单,异步复制的环境上,安装半同步复制插件即可。

首先,判断mysql服务器是否支持动态增加插件

mysql> select @@have_dynamic_loading;
+------------------------+
| @@have_dynamic_loading |
+------------------------+
| YES |
+------------------------+
1 row in set (0.03 sec)

2)确认支持动态增加插件后,检查mysql的安装目录下是否存在插件,一般默认在$/MYSQL_HOME/lib/plugin目录下存在主库插件semisync_master.so和从库插件semisync_slave.so

3)主库上安装semisync_master.so插件

mysql>install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;

4)从库上安装semisync_slave.so插件

mysql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;

5)安装完成后,从plugin表中能够看到刚才安装的插件:安装完成后,mysql会在系统表plugin中记录刚才安装的插件,下次系统重启后会自动加载插件

select * from mysql.plugin;

6)需要分别在主库和从库上配置参数打开半同步semi-sync,默认半同步设置是不打开的,主库上配置全局参数

mysql>set global rpl_semi_sync_master_enabled=1;

mysql>set global rpl_semi_sync_master_timeout=30000;

7)从库上一样配置全局参数

mysql>set global rpl_semi_sync_slave_enabled=1;

8)由于之前配置的复制是异步复制,所以需要重启一下从库上的io线程(如果是全新配置的半同步复制则不需要)

stop slave io_thread;start slave io_thread;

9)至此半同步配置完毕,主库上通过show status命令能否看到当前半同步复制的一些状态值。

mysql> show status like ‘%semi_sync%‘;

+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+

Rpl_semi_sync_master_no_tx | 0 |    表示当前有0个事务不是半同步模式下从库及时相应的。
| Rpl_semi_sync_master_status | ON | on 表示半同步复制目前处于打开状态

| Rpl_semi_sync_master_yes_tx | 0 |    表示主库当前尚未有任何一个事务是通过半同步复制到从库

+--------------------------------------------+-------+

 

网络异常的情况下,主库在等待rpl_semi_sync_master_timeout毫秒超时后,自动转成异步复制的场景。

 

半同步复制,布布扣,bubuko.com

半同步复制

标签:使用   io   数据   ar   art   问题   log   ad   

原文地址:http://www.cnblogs.com/lehao/p/3927656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!