专栏首页mysql-dba半同步复制搭建过程
原创

半同步复制搭建过程

环境:centos7 + mysql8.0.25 一主一从(异步复制)

半同步复制需要安装额外插件之后才能启用,然后通过相应的变量启用,在安装插件之前这些变量不可用

安装半同步复制之前请先配置好异步复制并且可用

1.安装一主一从的异步复制(过程省略)

2.安装加载半同步复制插件

主库:
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.01 sec)

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+
1 row in set (0.00 sec)

备库:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_slave  | ACTIVE        |
+----------------------+---------------+
2 rows in set (0.00 sec)
建议主从把这个2个插件都安装上

3.启用主库的半同步插件:

主库:
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%rpl_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 |
| rpl_semi_sync_slave_enabled               | OFF        |
| rpl_semi_sync_slave_trace_level           | 32         |
+-------------------------------------------+------------+
8 rows in set (0.00 sec)

4.启用从库的半同步插件:

启用从库的半同步插件:
mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | OFF        |
| 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 |
| rpl_semi_sync_slave_enabled               | ON         |
| rpl_semi_sync_slave_trace_level           | 32         |
+-------------------------------------------+------------+
8 rows in set (0.01 sec)

5.检查主库的半同步插件是否被启用

mysql> show status like '%semi%status%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
| Rpl_semi_sync_slave_status  | OFF   |
+-----------------------------+-------+
2 rows in set (0.01 sec)

mysql> 

6.检查备库的半同步插件是否被启用:

mysql> show status like '%semi%status%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_slave_status  | OFF   |
+-----------------------------+-------+
2 rows in set (0.01 sec)
mysql> 

因为从库的复制线程不能自动感知到半同步复制插件的配置变化,所以此时半同步复制在备库中未生效

重启备库的io_thread

mysql> stop slave io_thread;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave io_thread;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>  show status like '%semi%status%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | OFF   |
| Rpl_semi_sync_slave_status  | ON    |
+-----------------------------+-------+
2 rows in set (0.00 sec)
现在从库半同步插件启用了

7.在主从实例配置文件中添加半同步插件的配置

#for master
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000

#for slave
rpl_semi_sync_slave_enabled = 1

8.半同步复制验证

mysql> show status like '%semi%tx%';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| Rpl_semi_sync_master_no_tx            | 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_yes_tx           | 0     |
+---------------------------------------+-------+
5 rows in set (0.00 sec)

mysql> use ww_xxx
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into test values (4),(6),(9),(10);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from test;
+------+
| id   |
+------+
|    4 |
|    6 |
|    9 |
|   10 |
+------+
4 rows in set (0.00 sec)

mysql> show status like '%semi%tx%';
+---------------------------------------+-------+
| Variable_name                         | Value |
+---------------------------------------+-------+
| Rpl_semi_sync_master_no_tx            | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time | 358   |
| Rpl_semi_sync_master_tx_wait_time     | 716   |
| Rpl_semi_sync_master_tx_waits         | 2     |
| Rpl_semi_sync_master_yes_tx           | 2     |
+---------------------------------------+-------+
5 rows in set (0.00 sec)

mysql> 

Rpl_semi_sync_master_yes_tx 成功收到slave ack的事务数量 可以看出有2个事务通过半同步复制进行的
停止备库的io_thread线程,在主库执行事务
mysql> insert into test values(100);
Query OK, 1 row affected (10.01 sec)
mysql>
可以看到语句执行10s 等待备库ack响应超时这也证明半同步复制生效了
超时之后转换为异步复制了
mysql> show status like '%semi%status%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | OFF   |
| Rpl_semi_sync_slave_status  | OFF   |
+-----------------------------+-------+
2 rows in set (0.00 sec)

启动io_thread,恢复复制连接,主库从异步复制提升为半同步复制
mysql> show status like '%semi%status%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
| Rpl_semi_sync_slave_status  | OFF   |
+-----------------------------+-------+
2 rows in set (0.00 sec)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL半同步复制

    MySQL通过复制(Replication)实现存储系统的高可用。目前,MySQL支持的复制方式有:

    linjinhe
  • MySQL半同步复制

      何为半同步复制模式呢?在此我们先了解异步复制模式,这是MySQL的默认复制选项。异步复制即是master数据库把binlog日志发送给slave数据库,然后...

    那一叶随风
  • MySQL半同步复制

    要开启半同步,我们需要安装插件,基本的要求是在满足异步复制的情况下,版本在5.5以上,并且变量have_dynamic_loading为YES,即判断是否支持动...

    jeanron100
  • mysql 半同步复制

    转载:https://www.cnblogs.com/zero-gg/p/9057092.html

    用户5760343
  • MySQL的异步复制、全同步复制与半同步复制

    今天主要聊一下MySQL的异步复制、全同步复制与半同步复制,目前我们生产库实际上用的就是异步复制了,后面再转成半同步复制。

    木禾wen
  • MySQL 8 复制(二)——半同步复制

    直到目前的最新版本为止,MySQL缺省依然使用异步复制策略。简单说所谓异步复制,指的是主库写二进制日志、从库的I/O线程读主库的二进制日志写本地...

    用户1148526
  • mysql复制系列4-半同步复制

    异步复制:主库将事件写入二进制日志,但不知道从库是否接收成功,也不知道从库什么时候重放二进制日志,如果主库崩溃,则在主库提交的事务可能还没有传输到从库,这种情况...

    wangwei-dba
  • MySQL Case-使用Wireshark窥探异步复制、半同步、组复制

    我们知道异步复制、5.6版本半同步和MySQL 5.7出来的增强半同步,还有MGR在主从复制的过程中流程是不同的,那么我们能不能通过tcpdump或wiresh...

    姚崇
  • MySQL复制全解析 Part 3 MySQL半同步复制设置

    MySQL复制全解析 Part 2 一步步搭建基于二进制文件位置的MySQL复制

    bsbforever
  • 使用Docker快速体验MySQL半同步复制机制

    近期研究了下MySQL的半同步复制机制,想要体验一下。搭建环境是件麻烦事,然后就想到用Docker快速搭建环境。

    Coder Sam
  • 一步步搭建基于GTID的MySQL复制

    虽然从库可以不需要开启二进制日志功能,这里我们推荐主从库同时开启二进制日志功能,方便主从切换

    bsbforever
  • MySQL半同步复制的数据一致性探讨

    MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。由于其体积小、速度快、拥有成本低,尤其是...

    腾讯大讲堂
  • MySQL中的半同步复制(r11笔记第65天)

    关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半同步复制。 三种复制方式 第一种是异步复制,是比较经典的主从复制,搭建主从默认的架构方...

    jeanron100
  • 聊聊redis的主从复制实现与同步过程

    我们在业务中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等要求

    1014803
  • Lsyncd搭建同步镜像-远程实时同步备份

        lsyncd会密切监测本地服务器上的参照目录,当发现目录下有文件或目录变更后,立刻通知远程服务器,并通过rsync 或rsync+ssh方式实现文件同步...

    Vicson
  • 【DB宝64】MySQL主从之1主2从异步复制搭建及同步测试

    MySQL主从复制(MySQL Replication)是指从一个MySQL主服务器(master)将数据拷贝到另一台或多台MySQL从服务器(slaves)的...

    小麦苗DBA宝典
  • RAID5阵列崩溃/重建/同步后的数据恢复过程

    一台HP 服务器,挂接一台raid5磁盘阵列,内接5块1TB硬盘,原先结构为RAID5。

    北亚数据恢复中心
  • PostgreSQL 12 的同步流复制搭建及主库hang问题处理与分析

    主备流复制,是PostgreSQL最常用、最简单的一种高可用、读写分离的形式,类似于Oracle的ADG,主库用于读写,备库可以只读。

    数据和云
  • MySQL复制全解析 Part 2 一步步搭建基于二进制文件位置的MySQL复制

    https://dev.mysql.com/doc/refman/5.7/en/replication.htm

    bsbforever

扫码关注云+社区

领取腾讯云代金券