下文给大家带来关于mysql5.5以上实现半同步复制方法,感兴趣的话就一起来看看这篇文章吧,相信看完MysqL5.5以上实现半同步复制方法对大家多少有点帮助吧。
1.半同步
半同步复制是主库将binlog日志发给从库,并确认binlog写入从库的relay-log的日志中,这个时候才会返回给主库
2.异步复制
异步复制就是咱们平时说的主从复制,主库将binlog发给从库这个时候就会结束,并不会确认从库是否接收完毕
3.注意事项:
半同步如果出现超时,这个时候主从复制会暂时切换到异步复制的模式,直到一台设置为半同步的数据库能够及时接受信息为止
实验:
MysqL主从复制已经做好
主库:
192.168.56.10
从库:
192.168.56.11
一.主库:
1.查看半同步插件默认是否开启自动加载,可以看出有自动加载功能
MysqL> show variables like '%dynamic%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
1 row in set (0.00 sec)
MysqL>
2.安装插件
MysqL>install plugin rpl_semi_sync_master soname 'semisync_master.so';
MysqL>show plugins;
MysqL>SET GLOBAL rpl_semi_sync_master_enabled = 1; #开启半同步复制,默认是关闭的
vim /etc/my.cnf #确保重启配置文件能够生效
[MysqLd]
GLOBAL rpl_semi_sync_master_enabled = 1
二.从库:
MysqL>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
MysqL>show plugins; #查看是否加载成功
MysqL>SET GLOBAL rpl_semi_sync_slave_enabled = 1; #开启半同步复制,默认是关闭的
MysqL>stop slave;
MysqL>start slave;
vim /etc/my.cnf
[MysqLd]
rpl_semi_sync_slave_enabled=1
###########到此MysqL半同步已经做好#######################################
主库:
MysqL> show variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON | ##半同步开启的状态
| rpl_semi_sync_master_timeout | 10000 | #半同步超时时间10s,超过10s切换为异步复制
| rpl_semi_sync_master_trace_level | 32 | #半同步的调试级别
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON | #master的每个事务都要slave确认
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
从库:
MysqL> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON | #可以看出已经打开半同步复制
| rpl_semi_sync_slave_trace_level | 32 | #半同步调试级别为
+---------------------------------+-------+
2 rows in set (0.00 sec)
主库:
MysqL> show status like '%semi%';
+--------------------------------------------+-------+
| 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 | 2 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 1 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 611 |
| Rpl_semi_sync_master_tx_wait_time | 611 |
| Rpl_semi_sync_master_tx_waits | 1 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 1 |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)
Rpl_semi_sync_master_status表示主云服务器使用是异步还是半同步复制
Rpl_semi_sync_master_client表示从云服务器有多少个配置成半同步复制
Rpl_semi_sync_master_yes_tx表示从云服务器确认成功提交的数量
Rpl_semi_sync_master_no_tx表示从云服务器确认失败提交的数量
############################################################
测试
从库 stop slave;
主库创建一个库
create database te; #创建的时候特别慢 需要超时 10s,但是能创建成功
show status like '%semi%';
Rpl_semi_sync_master_status | OFF ##半同步已经转换为异步复制
从库 start slave;
主库又切换为半同步复制,
反思:有半同步的原理可以知道 半同步在一定程度上确保了主从一致,但是效率确实别异步复制低,具体测试我没测试
看了以上关于MysqL5.5以上实现半同步复制方法详细内容,是否有所收获。如果想要了解更多相关,可以继续关注我们的行业资讯板块。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。