MySQL的GTID复制

GTID(Global Transaction Identifier)复制是 MySQL 5.6 及以上版本引入的一种复制方式,相比传统的基于二进制日志(binlog)位置的复制,GTID 复制具有更简单、更可靠、更易于管理等优点。以下为你详细介绍 MySQL 的 GTID 复制:

1. GTID 概述

GTID 是一个全局唯一的标识符,用于标识 MySQL 中的每一个事务。它由两部分组成,格式为 uuid:transaction_id,其中 uuid 是 MySQL 服务器的唯一标识符,transaction_id 是该服务器上事务的序列号。通过 GTID,主从复制过程中可以更准确地跟踪和管理事务,避免了传统复制方式中可能出现的复制偏移问题。

2. GTID 复制的优点

  • 简化配置:在传统复制中,需要手动指定二进制日志文件和位置来启动复制,而 GTID 复制只需要配置主库的连接信息和开启 GTID 功能,系统会自动根据 GTID 来同步事务,大大简化了配置过程。
  • 自动故障转移:当主库发生故障时,从库可以根据 GTID 快速定位到最新的事务,方便进行主从切换,提高了系统的可用性。
  • 避免重复执行事务:GTID 可以确保每个事务在从库上只执行一次,避免了传统复制中可能出现的事务重复执行问题,保证了数据的一致性。

3. GTID 复制的配置步骤

主库配置

  • 编辑配置文件:编辑 MySQL 的配置文件(通常是 my.cnf 或 my.ini),在 [mysqld] 部分添加或修改以下参数:
 
[mysqld]
server-id = 1  # 主库的唯一标识符,必须是正整数
log-bin = mysql-bin  # 开启二进制日志
gtid_mode = ON  # 开启 GTID 模式
enforce-gtid-consistency = ON  # 强制 GTID 一致性
  • 重启 MySQL 服务:保存配置文件后,重启 MySQL 服务使配置生效。
 
# 对于使用 systemd 的系统
sudo systemctl restart mysql

# 对于使用 init.d 的系统
sudo service mysql restart

从库配置

  • 编辑配置文件:同样编辑从库的配置文件,添加或修改以下参数:
[mysqld]
server-id = 2  # 从库的唯一标识符,不能与主库相同
log-bin = mysql-bin  # 开启二进制日志
gtid_mode = ON  # 开启 GTID 模式
enforce-gtid-consistency = ON  # 强制 GTID 一致性
  • 重启 MySQL 服务:保存配置文件后,重启从库的 MySQL 服务。

建立复制关系

  • 在主库上创建复制用户:登录主库,创建一个用于复制的用户,并授予相应的权限。
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
  • 在从库上配置复制:登录从库,执行以下 SQL 语句配置复制。
CHANGE MASTER TO
MASTER_HOST='主库 IP 地址',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION = 1;  # 使用 GTID 自动定位

START SLAVE;  # 启动从库复制
  • 检查复制状态:在从库上执行以下 SQL 语句检查复制状态。
 
SHOW SLAVE STATUS\G

如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,则表示复制配置成功。

4. GTID 复制的注意事项

  • 兼容性:GTID 复制要求主从库的 MySQL 版本相同或兼容,否则可能会出现复制问题。
  • 数据一致性:在开启 GTID 模式之前,需要确保主从库的数据已经一致,否则可能会导致复制过程中出现数据不一致的问题。
  • 事务一致性:GTID 复制要求所有事务都必须是 GTID 一致的,因此在使用 GTID 复制时,需要避免使用一些不支持 GTID 的 SQL 语句,如 CREATE TEMPORARY TABLE 等。

posted on 2025-02-20 09:47  阿陶学长  阅读(121)  评论(0)    收藏  举报