MySQL主从复制(8)——半同步复制配置

MySQL主从复制(8)——半同步复制配置

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

从 MySQL5.5 开始引入了半同步复制模式。该模式可以确保从服务器接收完主服务器发送的 binlog 日志文件并写入到自己的中继日志(relay log),然后会给主服务器一个反馈,告诉主服务器已经接收完毕,这时主服务线程才返回给当前 session 告知操作完成。

半同步复制的配置过程如下:

一、操作环境

操作系统:CentOS Linux release 7.8.2003 (Core)
MySQL版本:MySQL5.7
主服务器IP:192.168.1.11
从服务器IP:192.168.1.12

二、主服务器的配置

1、安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.04 sec)

2、修改配置文件

log-bin = mysql-master-binlog
log-slave-updates = 1
binlog_format = row

server-id = 1
server_id_bits = 33
rpl_semi_sync_master_enabled = 1  # 表示在master上开启半同步复制模式
rpl_semi_sync_master_timeout = 1000  # 表示主库在某次事务中的等待时间为10000毫秒

3、查看半同步配置信息

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)

4、创建复制账号

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

三、从服务器的配置

1、安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.03 sec)

2、修改配置文件

log-bin = mysql-master-binlog
log-slave-updates = 1
binlog_format = row  

server-id = 2
server_id_bits = 32
rpl_semi_sync_slave_enabled = 1

3、查看半同步配置信息

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
+---------------------+---------------+
| PLUGIN_NAME         | PLUGIN_STATUS |
+---------------------+---------------+
| rpl_semi_sync_slave | ACTIVE        |
+---------------------+---------------+
1 row in set (0.03 sec)

4、设置复制选项

change master to
master_host='192.168.1.11',
master_user='repl',
master_password='123456',
MASTER_PORT=3306,
MASTER_AUTO_POSITION = 1;

5、启动 slave,查看从库状态

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.11
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-master-binlog.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-log.000003
                Relay_Log_Pos: 387
        Relay_Master_Log_File: mysql-master-binlog.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/107521694