msyql 的半同步复制
admin
2023-05-20 15:22:17
0


mysql的半同步复制:

 

mysql的异步复制:mysql默认使用异步方式进行同步,master在执行客户端提交的事务后会将结果返回给客户端,表示客户端的操作已经生效,同时会将该操作的binlog通过dumper通知slave来取,再正常情况下,slave会将该binlog写入本地,并通过sql语句写入从库中与主库同步数据,master对从库是否写入不负任何责任。

主和从的复制过程是由三个线程参与完成的,其中有两个线程(sql语句和I/O线程在slave端),一个I/O线程在master端。

mysql的同步复制:这是一个偏执狂,客户端向主库提交数据,主库写入数据只有从库将数据写入本地后,返回给主库一个回执,主库向客户端返回消息,表示已经成功受理该任务。

mysql半同步:在masterdumper线程通知salve,同时增加了一个ackmysql5.7支持在事务提交前等待ack,当slave没有返回给master ack时,将会自动降级为异步复制。

半同步通过rpl_semi_sync_master_wait_point参数来控制半同步下,master事务提交前的方式

mysql中的半同步参数after_sync,master 将每个事务写入binlog传递到slave刷新到磁盘relay logmaster等待slave反馈接收到的ack后在提交事务并返回提交成功给客户端。

半同步的部署:

半同步基于mysql的异步复制,所以要先搭建好环境。环境搭建参考我的博客:http://12237658.blog.51cto.com/12227658/1907018

 

 

测试:

主:master

安装半同步插件:

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

Query OK, 0 rows affected (0.08 sec)

查看插件是否安装成功:

mysql> show plugins;会在最后发现:

| ngram                      | ACTIVE   | FTPARSER           | NULL               | GPL     |

| rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |

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

表明成功。

 

从:slave

安装插件:

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

Query OK, 0 rows affected (0.11 sec)

使用:show plugins;或:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';

如果发现

| rpl_semi_sync_slave        | ACTIVE   | REPLICATION        | semisync_slave.so | GPL     |

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

即为成功。

 

启动半同步:

主:master

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show status like 'Rpl_semi_sync_master_status';

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

| Variable_name               | Value |

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

| Rpl_semi_sync_master_status | ON    |

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

1 row in set (0.00 sec)

 

从:slave

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

Query OK, 0 rows affected (0.00 sec)

mysql> show status like 'Rpl_semi_sync_slave_status';

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

| Variable_name              | Value |

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

| Rpl_semi_sync_slave_status | ON    |

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

1 row in set (0.00 sec)

 

最后重新启动一下I/O线程:

mysql> STOP SLAVE IO_THREAD;

 

mysql> START SLAVE IO_THREAD;

 

 

测试:

在不关闭slave的情况下创建数据库,主从库会很快写入

主:

mysql> show status like 'Rpl_semi_sync_master_status';

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

| Variable_name               | Value |

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

| Rpl_semi_sync_master_status | ON    |

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

1 row in set (0.00 sec)

 

mysql> create database ginkgo;

Query OK, 1 row affected (0.05 sec)

:

mysql> show  status like 'Rpl_semi_sync_slave_status';

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

| Variable_name              | Value |

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

| Rpl_semi_sync_slave_status | ON    |

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

1 row in set (0.00 sec)

 

mysql> show databases;

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

| Database           |

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

| information_schema |

| ginkgo             |

| mysql              |

| performance_schema |

| sys                |

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

5 rows in set (0.00 sec)

 

将从上的slave关闭:

 

mysql> drop database ginkgo;

Query OK, 0 rows affected (10.06 sec)

mysql> show status like 'Rpl_semi_sync_master_status';

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

| Variable_name               | Value |

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

| Rpl_semi_sync_master_status | OFF   |

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

1 row in set (0.00 sec)

slave长时间不给ack回应,被迫转化为异步,时间也较长,主要是等待时间。

从上肯定没有数据变化。

 

**注意,写数据库时一定要在配置文件中确定自己是允许那个库同步,不要瞎建库奥。


相关内容

热门资讯

特朗普刚走,普京火速访华所为何... 作者:艾文2026年5月15日下午,美国总统特朗普的专机刚刚离开北京,莫斯科方面就迫不及待地对外宣布...
伊朗最好适可而止,见好就收 很多人都注意到中美这次达成的共识,抛开经贸层面的不谈,地缘及国际政治层面的,成果也是相当丰富。特朗普...
武大食堂爆满,学生无座可坐 5月13日,武汉大学正式取消社会公众进校预约制度。但校园开放后,不少学生在社交平台上发帖反映,部分游...
美以讨论重启对伊战事,特朗普:... 美国总统特朗普17日在社交媒体发文称,如果伊朗不迅速行动,“将一无所有”。特朗普写道:“对伊朗而言,...
张雪回应拿下第五冠:准备冲击年... 5月17日,2026世界超级摩托车锦标赛(WSBK)捷克站结束WorldSSP组别第二回合正赛争夺。...
特朗普就台湾问题表态 美国总统特朗普结束访华后,就台湾问题明确表态,不希望看到有人走向“独立”。
日防卫白皮书草案又炒“中国威胁... 【环球时报驻日本特约记者 初欣 环球时报记者 郭媛丹】日本政府2026年版《防卫白皮书》草案15日被...
47年,一条产业链托起一台冠军... 从嘉陵CJ50到张雪机车820RR——47年,一条产业链托起一台冠军摩托车(经济聚焦)本报记者 王欣...
核电站遭袭,阿联酋与卡塔尔、约... 当地时间17日,阿联酋强烈谴责针对位于宰夫拉地区巴拉卡核电站外围一台发电机的袭击。此次袭击由一架从西...
没处休、没空休、不敢休,保洁员... 一些商场、写字楼没有设置工间休息室,他们没空休息、无处休息——保洁员该在哪儿歇脚(金台视线)本报记者...