MySQL5.7半同步复制
来源:互联网 发布:有靠谱的网络兼职吗 编辑:程序博客网 时间:2024/06/05 21:56
半同步复制原理:
半同步复制保证了数据库之间数据的一致性。
MySQL5.7以前:
rpl_semi_sync_master_wait_point = AFTER_COMMITclient-->MySQL SQL Parse-->Storage Involve-->write binary log-->storage commit-->wait ACK-->client(OK)
主库把每一个事务写到二进制日志并保存到磁盘上,且发送给从库,并把事务写到存储引擎里,主库在等待从库写到自己的relay-log里确认信息。在接收到确认信息后,主库把相应结果返回给客户端。
问题:主库把事务写到存储后,如果此时从库因网络等问题没有收到,但此时主库又挂了,在HA架构中,因故障转移进行主从切换时,就丢失了该事务。
MySQL5.7:
rpl_semi_sync_master_wait_point = AFTER_SYNCclient-->MySQL SQL Parse-->Storage Involve-->write binary log-->wait ACK-->storage commit-->client(OK)
主库把每一个事务写道二进制日志并保存到磁盘上,并发给从库,主库等待从库写到自己的relay-log日志里的确认信息。主库收到确认后再将事务写到存储引擎里,然后将结果返回给客户端。
rpl_semi_sync_master_wait_slave_count 指定有几台slave收到binlog才成功返客户端请求,默认任意一台。
实验实现:
master:172.25.67.1
slave1:172.25.67.3
slave2:172.25.67.4
firewalld selinux disabled
安装mysql5.7
半同步复制模式必须在主服务器和从服务器同时启用,否则主服务器默认使用异步复制模式。
master和slave都做:
半同步复制需要安装相应插件,如果用rpm包装的mysql5.7,则插件在该目录下:
/usr/lib64/mysql/plugin/
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';mysql> set global rpl_semi_sync_master_enabled=ON;mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';mysql> set global rpl_semi_sync_slave_enabled=ON;
初次加载插件后,MySQL会将该插件记录到系统表mysql.plugin中,下次启动会自动加载该插件,但如果要让插件自动生效,需要修改配置文件:
vim /etc/my.cnflog-bin=mysql-binbinlog-do-db=testserver-id=1 #slave的id一定不同binlog-ignore-db=mysql# 自动开启半同步复制rpl_semi_sync_master_enabled=ONrpl_semi_sync_slave_enabled=ON***********
测试:
master:
mysql> show status like "%semi%";+--------------------------------------------+-------+| Variable_name | Value |+--------------------------------------------+-------+| Rpl_semi_sync_master_clients | 2 || 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 | 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 | 252 || Rpl_semi_sync_master_tx_wait_time | 252 || 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 || Rpl_semi_sync_slave_status | OFF |+--------------------------------------------+-------+
Rpl_semi_sync_master_clients 用于显示有多少个从服务器配置成了半同步模式
Rpl_semi_sync_master_status 用于指示主服务器是使用异步还是半同步模式,ON->半同步
Rpl_semi_sync_master_yes_tx 用于显示从服务器确认的成功提交数量
在slave:
mysql> show status like "%semi%";+--------------------------------------------+-------+| Variable_name | Value |+--------------------------------------------+-------+| Rpl_semi_sync_master_status | ON || Rpl_semi_sync_slave_status | ON |+--------------------------------------------+-------+
Rpl_semi_sync_slave_status 表示从服务器的半同步复制模式已经开始工作。
压力测试:
半同步复制:
[root@server1 ~]# mysqlslap -uroot -pxxxxxxxx --concurrency=100 --number-of-queries=1000 --auto-generate-sqlmysqlslap: [Warning] Using a password on the command line interface can be insecure.Benchmark Average number of seconds to run all queries: 2.094 seconds Minimum number of seconds to run all queries: 2.094 seconds Maximum number of seconds to run all queries: 2.094 seconds Number of clients running queries: 100 Average number of queries per client: 10
异步复制:
[root@server1 ~]# mysqlslap -uroot -pxxxxxxxx --concurrency=100 --number-of-queries=1000 --auto-generate-sqlmysqlslap: [Warning] Using a password on the command line interface can be insecure.Benchmark Average number of seconds to run all queries: 1.840 seconds Minimum number of seconds to run all queries: 1.840 seconds Maximum number of seconds to run all queries: 1.840 seconds Number of clients running queries: 100 Average number of queries per client: 10
- MySQL5.7半同步复制
- MySQL5.7半同步复制技术
- mysql5.7的半同步复制
- mysql5.5主从复制-半同步复制
- MySQL5.7: 半同步复制(Semisynchronous Replication)配置
- mysql5.5新功能半同步复制介绍
- mysql5.5半同步主从复制
- MySQL5.5半同步复制实现原理
- MySQL5.5配置安装半同步复制
- MySQL5.5半同步复制配置安装
- mysql5.5配置半同步复制
- MySQL5.7 对半同步复制的改进
- MySQL5.7主从复制配置,数据同步
- MySQL5.7 大大降低了半同步复制-数据丢失的风险
- MySQL5.7 大大降低了半同步复制-数据丢失的风险
- MySQL5.7 大大降低了半同步复制-数据丢失的风险
- MySql5.5半同步复制(Semi-sync repication)
- MySQL5.6半同步复制配置及实验
- Java包装类详解
- Java学习之路:不走弯路,就是捷径
- 延时,定时与临时文件
- Web前端开发学习笔记 (一)
- 字符串替换
- MySQL5.7半同步复制
- Selenium基础
- 时间戳和时间的相互转换
- activiti学习笔记(二) 获取流程实例
- Java基础复习——(一)Java基础概述
- JSP九大内置对象及四个作用域
- 1
- shell脚本编程习题浅析
- IO基础