MySQL8.0.25使用插件实现主从半同步复制

主从半同步复制的作用

  • 默认情况下,MySQL的复制功能是异步的,
  • 异步复制可以提供最佳的性能,
  • 主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。
  • 这意味着当主服务器或从服务器端发生故障时,
  • 有可能从服务器没有接收到主服务器发送过来的binlog日志,
  • 这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失

MySQL8.0.25配置实现主从半同步

  • 先装功能插件模块,
  • 再启用插件功能,
  • 最后修改配置文件永久生效。

检查插件是否已存在

  • 使用yum或者rpm安装,使用rpm -ql查看包中部署的模块
rpm -ql mysql-server |grep semisync
/usr/lib64/mysql/plugin/semisync_master.so
/usr/lib64/mysql/plugin/semisync_slave.so
  • 使用二进制或者源码编译安装,用find查找模块是否存在
find / -name 'semisync*' 
/usr/local/mysql-8.0.25-linux-glibc2.17-x86_64-minimal/lib/plugin/semisync_master.so
/usr/local/mysql-8.0.25-linux-glibc2.17-x86_64-minimal/lib/plugin/semisync_slave.so

主和所有从节点均需安装并开启插件

  • 进入数据库并安装插件
    mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #永久安装插件
  • 临时开启半同步功能(免重启立即生效)
    SET GLOBAL rpl_semi_sync_master_enabled=1; #临时修改变量

主节点修改配置文件并设定半同步阈值

  • 修改配置文件启用插件
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=8
log-bin
#添加或修改下行,需要先安装semisync_master.so插件后,再重启,否则无法启动
rpl_semi_sync_master_enabled=ON 
#加或修改下行,设置3s内无法同步,也将返回成功信息给客户端
rpl_semi_sync_master_timeout=3000
  • 进入mysql设定阈值 (免重启立即生效)
    rpl_semi_sync_master_timeout=3000 #设置3s内无法同步,也将返回成功信息给客户端

从节点修改配置文件

  • 所有从节点必须全部修改
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=8
log-bin
#添加或修改下行,需要先安装semisync_master.so插件后,再重启,否则无法启动
rpl_semi_sync_master_enabled=ON 

从节点确认配置生效

#注意:如果已经实现主从复制,需要stop slave;start slave;
mysql> stop slave;start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> SHOW GLOBAL STATUS LIKE '%semi%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)

主节点确认配置生效

mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 1000       |
| 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.01 sec)

mysql> SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 3    |
| 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              | 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      | 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.00 sec)

测试

在master实现,创建数据库,立即成功

MariaDB [db1]> create database db2;
Query OK, 1 row affected (0.004 sec)

在所有slave节点实现,停止复制线程

MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.011 sec)

在master实现,创建数据库,等待3s才能成功

MariaDB [db1]> create database db3;
Query OK, 1 row affected (3.003 sec)

在任意一个slave节点实现,恢复复制线程

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.006 sec)

在master实现,创建数据库,立即成功

MariaDB [db1]> create database db4;
Query OK, 1 row affected (0.002 sec)

Mariadb-10.3.11区别

  • Mariadb-10.3.11及后续版本无法使用INSTALL PLUGIN直接安装
  • 需要数据库服务器配置文件中添加调用插件,重启数据库服务器后生效
#在master实现,启用半同步功能
[root@master ~]#vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
server-id=8
log-bin
plugin-load-add = semisync_master
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=3000 #设置3s内无法同步,也将返回成功信息给客户端
  • 就是多了一行配置参数,主从服务器均需通过此参数启用插件功能
  • plugin-load-add = semisync_master
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 8.0.34版本中,主从复制的配置步骤如下: 1. 确保主数据库和从数据库的版本相同,并且都是MySQL 8.0.34版本。 2. 在主数据库中,编辑主配置文件(my.cnf或my.ini),设置以下参数: - server-id=1: 设置主数据库的唯一标识符为1。 - log_bin=mysql-bin: 启用二进制日志,用于记录主数据库的所有变更操作。 3. 重启主数据库,使配置生效。 4. 在主数据库中,创建用于从数据库复制的用户,并为该用户授予适当的权限。 5. 在从数据库中,编辑从配置文件(my.cnf或my.ini),设置以下参数: - server-id=2: 设置从数据库的唯一标识符为2。 - relay-log=mysql-relay-bin: 启用中继日志,用于从数据库接收主数据库的二进制日志事件。 - log_slave_updates: 允许从数据库将收到的二进制日志事件传播给其他从数据库。 6. 重启从数据库,使配置生效。 7. 在主数据库中,执行CHANGE MASTER TO语句,将从数据库的连接信息添加到主数据库中。 8. 在从数据库中,执行START SLAVE语句,启动从数据库复制进程。 9. 检查主数据库和从数据库的状态,确保主从复制已成功建立。 需要注意的是,在MySQL 8.0.34版本中,主数据库的root密码需要使用如下语句进行修改: ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678'。<span class="em">1</span> #### 引用[.reference_title] - *1* [Docker Mysql 8.0.19 搭建主从复制](https://blog.csdn.net/qq_34474636/article/details/129903309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值