MySQL运维——基于 GTID 模式的 MySQL 从库恢复与主从重建

通过 xtrabackup 备份主库数据恢复到从库,重置从库的 GTID 信息,重新配置主从同步(GTID 模式),让从库从备份的 GTID 位点开始同步主库后续的 binlog,重建主从复制关系。

GTID 模式的前提条件

主库的 repl 用户必须有复制权限:

-- 主库执行
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'从库IP' IDENTIFIED BY 'kga!H6uC6sNo>QjP';
FLUSH PRIVILEGES;

主从库必须都开启 GTID(my.cnf 配置):

[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON  # 从库同步的事务写入自身binlog(可选,级联复制需要)

1、停从库,备份 my.cnf,清空从库目录

# 停从库(CentOS 7)
systemctl stop mysqld

# 备份my.cnf(防止配置丢失)
cp /etc/my.cnf /etc/my.cnf.bak

# 清空从库数据目录(如 /data/mysql)
rm -rf /data/mysql/*

2、用 innobackupex 恢复备份数据

innobackupex --defaults-file=3306.my.cnf --copy-back /stor/mydata2/hysound/2022-07-12_03-01-01/
chown -R mysql:mysql /data/mysql  # 替换为你的datadir路径
chmod -R 755 /data/mysql

3、提取备份中的 GTID 位点信息

xtrabackup_info 文件中获取关键信息:

binlog_pos = filename 'mysql-bin.000153', position '434434779', GTID of the last change 'caa383cb-f1e0-11eb-a179-2cea7fed4c41:1-3640562,e5ee05ea-ee86-11eb-ac90-2cea7fed4c43:1-401'

4、启动从库

systemctl start mysqld

5.1、临时关闭当前会话的 binlog 记录

set @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;  -- 保存当前SQL_LOG_BIN值
set @@SESSION.SQL_LOG_BIN= 0;  -- 关闭当前会话的binlog(避免配置操作写入binlog)

5.2、解决 @@GLOBAL.GTID_PURGED 设置失败的报错

报错原因
GTID_PURGED 用于标记 “已清理的 GTID 集合”,仅当 GTID_EXECUTED(从库已执行的 GTID)为空时才能设置;从库恢复后 GTID_EXECUTED 不为空,因此需执行 reset master 清空。

-- 原报错:ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
reset master;  -- 重置主库信息(从库执行此命令会清空GTID_EXECUTED,不影响主库)

5.3、设置 GTID_PURGED

set @@GLOBAL.GTID_PURGED='caa383cb-f1e0-11eb-a179-2cea7fed4c41:1-3640562,e5ee05ea-ee86-11eb-ac90-2cea7fed4c43:1-401';

5.4、恢复会话的binlog记录

set @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

5.5、配置主从同步(GTID 模式)

关键参数master_auto_position=1 表示使用 GTID 模式同步,从库会自动找主库中未执行的 GTID 开始同步。

change master to 
master_host='10.40.0.3',  -- 主库IP
master_port=3306,         -- 主库端口
master_user='repl',       -- 主从复制用户
master_password='kga!H6uC6sNo>QjP',  -- 复制用户密码
master_auto_position=1;   -- 启用GTID自动定位(核心,替代传统的log_file+log_pos)

5.6、启动从库同步进程

start slave;

6、验证主从同步状态

show slave status\G;
Categories: 数据库运维