MySQL 半同步复制 GTID搭建

1. 简介

半同步复制是MySQL的一种复制模式,可以提高数据的可靠性和一致性。在半同步复制中,主库在写入数据后,必须等待至少一个从库确认已经接收并应用了这个变更才能继续写入下一个变更。这种方式可以有效避免由于主库与从库之间网络延迟或者从库故障导致的数据不一致问题。

GTID(Global Transaction Identifier)是MySQL 5.6版本以上引入的一个全局事务标识符。GTID可以唯一标识每个数据库实例的每个事务,可以简化复制拓扑的配置和管理。

本文将介绍如何在MySQL中搭建半同步复制,并使用GTID来提高复制的可靠性和管理的便利性。

2. 步骤

下表展示了实现MySQL半同步复制GTID搭建的步骤:

步骤 描述
步骤一 配置主库
步骤二 配置从库
步骤三 启用半同步复制
步骤四 验证半同步复制
步骤五 配置GTID
步骤六 验证GTID

下面逐步进行详细说明。

3. 配置主库

首先,在主库上进行如下配置:

  1. 打开MySQL配置文件,例如/etc/my.cnf,添加如下配置项:
# 启用binlog
server-id = 1
log-bin = mysql-bin
binlog-format = ROW     # 若已经启用了binlog,请确保使用ROW格式
  1. 重启MySQL服务,使配置生效。

4. 配置从库

接下来,在从库上进行如下配置:

  1. 打开MySQL配置文件,例如/etc/my.cnf,添加如下配置项:
# 启用binlog
server-id = 2
log-bin = mysql-bin
binlog-format = ROW     # 若已经启用了binlog,请确保使用ROW格式

# 启用relay log
relay-log = relay-log
relay-log-index = relay-log.index

# 启用GTID
gtid_mode = ON
enforce_gtid_consistency = ON
  1. 重启MySQL服务,使配置生效。

5. 启用半同步复制

在主库和从库上分别进行如下配置:

  1. 打开MySQL配置文件,例如/etc/my.cnf,添加如下配置项:
# 启用半同步复制
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  1. 重启MySQL服务,使配置生效。

6. 验证半同步复制

在主库上执行以下SQL语句,查看半同步复制的状态:

SHOW VARIABLES LIKE 'rpl_semi_sync%';

如果半同步复制已启用,应该会显示类似以下结果:

+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| rpl_semi_sync_master  | ON    |
| rpl_semi_sync_slave   | ON    |
+-----------------------+-------+

7. 配置GTID

在主库和从库上进行如下配置:

  1. 打开MySQL配置文件,例如/etc/my.cnf,添加如下配置项:
# 启用GTID
gtid_mode = ON
enforce_gtid_consistency = ON
  1. 重启MySQL服务,使配置生效。

8. 验证GTID

在主库上执行以下SQL语句,查看GTID的状态:

SELECT @@GLOBAL.gtid_mode;

如果GTID已启用,应该会显示类似以下结果:

+-------------------+
| @@GLOBAL.gtid_mode |
+-------------------+
| ON                |
+-------------------+

至此,MySQL半同步复制GTID搭建完成。

9. 状态图

下面是