mysql 5.6 半同步复制_MySQL5.6半同步复制配置及实验

MySQL5.5之前是异步复制,主库上写入事务并成功提交之后就返回给用户成功。如果主库的binlog还没有来得及传给从库,这样会造成主从数据不一致。MySQL5.5引入了半同步复制机制,主库上commit之后,并不及时反馈给前端用户,而是等待其中的一个从库接收到binlog并成功写入中继日志后,主库才返回commit操作成功给客户端。半同步复制保证了事务成功提交后,至少有两份日志记录,一份在主库的binlog上,另一份至少在一个从库的中继日志relay

log上。我觉得严格上来说,这也不是同步,也是一种异步。

mysql> select version();

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

| version()  |

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

| 5.6.14-log |

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

在$MYSQL_HOME/lib/plugin下有两个包semisync_master.so和semisync_slave.so。

主库配置:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';

mysql> select * from mysql.plugin;

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

| name                 | dl                 |

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

| rpl_semi_sync_master | semisync_master.so |

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

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 5000;#等待多长时间,如果还不能成功推送到从库,则自动调整为异步模式,事务正常返回给客户端

mysql> show status like '%semi_sync%';

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

| Variable_name                              | Value |

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

| Rpl_semi_sync_master_clients               | 1     |

| Rpl_semi_sync_master_net_avg_wait_time     | 0     |

| Rpl_semi_sync_master_net_wait_time         | 0     |

| Rpl_semi_sync_master_net_waits             | 0     |

| Rpl_semi_sync_master_no_times              | 0     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | ON    |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |

| Rpl_semi_sync_master_tx_wait_time          | 0     |

| Rpl_semi_sync_master_tx_waits              | 0     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 0     |

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

重启生效需要配置my.cnf,需要先安装这个插件,后配置,否则无法启动

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=5000   #这里是5秒,正式环境上建议设置小一点,如1秒

从库配置:

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';

mysql> select * from mysql.plugin;

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

| name                | dl                |

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

| rpl_semi_sync_slave | semisync_slave.so |

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

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

mysql>  show status like '%semi_sync%';

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

| Variable_name              | Value |

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

| Rpl_semi_sync_slave_status | ON    |

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

重启生效需要配置my.cnf,需要先安装这个插件,后配置,否则无法启动

rpl_semi_sync_slave_enabled = 1

开始测试:

主库:

mysql> create table a(col int);

Query OK, 0 rows affected (0.11 sec)

从库:

mysql> show create table a;

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

| Table | Create Table                                                                         |

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

| a     | CREATE TABLE `a` (

`col` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

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

1 row in set (0.00 sec)

停止从库后,在主库上操作,等待了5s:

mysql> drop table a;

Query OK, 0 rows affected (5.01 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值