Mysql之半同步复制
一、半同步复制介绍
1、半同步复制简介
Mysql数据库复制默认的方式是异步复制,但异步复制的不足之处是主库把event写入二进制日志后,并不知道从库是否已经接受并应有了。在异步模式下,如果主库崩溃,很有可能在主库中已经提交的事务,并没有传到任何一台从库服务器上,在高可用集群架构下做主备切换,就会造成新的主库丢失数据的现象。从Mysql5.5版本之后引入了半同步复制功能,需要主从服务器均安装半同步复制插件,才能开启该复制功能。在该功能下,确保从库接受了主库传递过来的binlog内容已经写入到自己的relay log里面了,才会通知主库上面的等待线程,该操作完毕。如果等待超时,超过rpl_semi_sync_master_timeout参数设置的时间,则关闭半同步复制,并自动转换为异步模式,直到从库通知主库已经接收到binlog信息为止。
2、半同步复制原理图
二、半同步复制配置步骤
1、主从规划
序号 | 角色 | IP地址 | server-id | 端口 |
---|---|---|---|---|
1 | master | 192.168.0.124 | 124 | 3306 |
2 | slave | 192.168.0.125 | 125 | 3306 |
2、搭建异步主从复制
按照异步主从复制模式搭建主从,搭建方式参照博文
Mysql之异步主从复制搭建
3、主库安装半同步插件
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so’;
Query OK, 0 rows affected (0.01 sec)
4、主库启用半同步复制功能
mysql> set global rpl_semi_sync_master_enabled=on;
Query OK, 0 rows affected (0.00 sec)
5、主库检查插件是否加载成功
mysql> show plugins;
mysql> show variables like ‘%semi%’;
±------------------------------------------±-----------+
| Variable_name | Value |
±------------------------------------------±-----------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
±------------------------------------------±-----------+
6 rows in set (0.02 sec)
6、从库安装半同步插件
mysql> mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
Query OK, 0 rows affected (0.01 sec)
7、从库启用半同步复制功能
mysql> set global rpl_semi_sync_slave_enabled=on;
Query OK, 0 rows affected (0.00 sec)
8、从库检查插件是否加载成功
mysql> show plugins;
±---------------------------±---------±-------------------±---------------------±--------+
| Name | Status | Type | Library | License |
±---------------------------±---------±-------------------±---------------------±--------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
…
| rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL |
±---------------------------±---------±-------------------±---------------------±--------+
46 rows in set (0.03 sec)
9、重启从库的I/O线程
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.03 sec)
mysql> start slave io_thread;
Query OK, 0 rows affected (0.00 sec)
10、主库上查看半同步复制是否正常
mysql> show global 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 | 0 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 2 |
| 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 |
±-------------------------------------------±------+
14 rows in set (0.01 sec)
11、从库上查看半同步状态是否正常
Rpl_semi_sync_slave_status值为ON表示从库正常开启半同步复制模式。
mysql> show global status like ‘%semi%status%’;
±---------------------------±------+
| Variable_name | Value |
±---------------------------±------+
| Rpl_semi_sync_slave_status | ON |
±---------------------------±------+
1 row in set (0.00 sec)
12、插入数据验证
1)、主库插入数据
mysql> insert into t1 (id,name,age) values (‘3’,‘yueyue’,‘5’);
2)、主库查看状态
(Rpl_semi_sync_master_no_tx=2说明:在从库启用半同步复制前插入了2条数据)
3)、从库检查数据
mysql> select * from t1;
±—±-------±----+
| id | name | age |
±—±-------±----+
| 1 | wuhs | 33 |
| 2 | sunru | 32 |
| 3 | yueyue | 5 |
±—±-------±----+
3 rows in set (0.00 sec)
三、注意事项
- 如果需要开启启动半同步状态需要将如下参数写入配置文件
rpl_semi_sync_slave_enabled=on;
rpl_semi_sync_master_enabled=on; - 重要参数变量说明
Rpl_semi_sync_master_no_tx 代表没有成功接收slave提交的次数
Rpl_semi_sync_master_yes_tx 代表成功接收slave事务回复的次数 - rpl_semi_sync_master_timeout参数默认为10s,即主库在超过10s未收到从库的回复会自动切换为异步模式。为了保障数据的安全性,可以将该参数值调大。
- 主库Rpl_semi_sync_master_status=off表示半同步复制停止,如果需要从异步复制模式恢复为半同步复制模式,只需要在从库重新开启I/O thread,命令:start slave io_thread
相关文章
- MySQL数据同步解决方案(mysql同步工具)
- MySQL 多线程实现同步机制(mysql多线程同步)
- 表达式MySQL中数字正则表达式的应用(mysql数字正则)
- Mysql:一步一步指导MySQL安装版:一步一步指引安装(mysql安装版安装)
- MySQL 如何设置空值(mysql设置空值)
- MySQL主主复制架构的缺点探究(mysql主主缺点)
- MySQL实现主主复制和主从复制的方法及优缺点分析(mysql主主从)
- MySQL中定义变量的方法及注意事项(mysql定义变量)
- 安卓手机上MySQL管理神器(安卓mysql管理器)
- MySQL命令:重启数据库服务(mysql命令重启)
- Mysql 主备不同步问题解决方案(mysql主备不同步)
- MySQL主从重新同步:恢复完整数据库连接(mysql 主从重新同步)
- MYSQL快速同步更新MSSQL的指南(mysql更新mssql)
- MySQL如何删除数据?(mysql怎样删除数据)
- 怎样在C语言中引用Mysql数据库(c 中引用mysql)
- MySQL数据表同步的详细解析(mysql 两表同步详解)
- 使用CMD快捷查看MYSQL信息(cmd查看mysql信息)
- AD域账户实现安全登录MySQL数据库(AD域账户登录mysql)
- MySQL 多主复制方案三台服务器之间的主主复制(mysql三台主主复制)
- MySQL 同步启动解决多服务器数据同步问题(mysql 一起正在启动)
- 如何实现MySQL不同版本间的数据同步(mysql不同版本间同步)
- MySQL上机报告总结25字完整文章标题(mysql上机报告总结)
- MySQL怎么做不想为数据库表设置主键怎么办(mysql不想设置主键)