通过 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:
数据库运维