LinQ
发布于 2024-11-29 / 21 阅读 / 0 评论 / 0 点赞

mysql5.7主从复制中断修复

背景

现有一套主从复制架构的mysql 5.7数据库,主从复制中断较长时间,数据差异较大无法通过bingo同步恢复,另外数据库数据量较大,主库不能停机中断业务。

分析

使用xtrabackup 工具进行整库备份,从备份还原从库重搭备库然后恢复主从同步。

步骤

主从数据库安装 Xtrabackup 工具

官网安装参考:
https://docs.percona.com/percona-xtrabackup/2.4/installation/yum_repo.html
安装步骤:(yum 安装已失效,使用二进制包安装)

$ wget wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.27/binary/tarball/percona-xtrabackup-2.4.27-Linux-x86_64.glibc2.12.tar.gz

$ tar xvf percona-xtrabackup-2.4.27-Linux-x86_64.glibc2.12.tar.gz

  mv ./percona-xtrabackup-2.4.27-Linux-x86_64.glibc2.12  /usr/local/
  cd /usr/local/

 ln -s ./percona-xtrabackup-2.4.27-Linux-x86_64.glibc2.12/  xtrabackup

 vim  /etc/profile
 #结尾添加
 # PATH=$PATH:/usr/local/xtrabackup/bin
 # export PATH

 source /etc/profile
 #查看能否使用
 innobackupex -v

备份主库

创建备份脚本:

#!/bin/bash
password='xxxxxxx'
innobackupex --defaults-file=/etc/my.cnf   --user=root --password=$password --socket=/var/lib/mysql/mysql.sock --parallel=4 --no-timestamp --stream=xbstream . | lz4 -B4 > /bak/mysqlbak_`date +%F`
exit 0

执行备份脚本,并将备份文件传输到从库。

恢复从库

停止从库,清空从库的数据目录 /var/lib/mysql

systemctl stop mysqld
rm -rf /var/lib/mysql/*

#解压到文件夹
cat mysqlbak_2024-11-29 | lz4 -d | xbstream -x -C /tmp/mysql
#还原数据
innobackupex --apply-log /tmp/mysql/
innobackupex --copy-back  /tmp/mysql/
#修改目录权限
chown mysql.mysql  /var/lib/mysql  -R
#启动数据库
systemctl start mysqld

恢复主从同步

查看xtrabackup数据备份中的xtrabackup_binlog_info文件,此文件中记录了三个重要信息,分别是:

1). 备份主库时binlog文件名--下图中红色框内标记的值

2). 备份主库时最后一个事务ID--下图中黄色框内标记的值

3).备份主库时最后一个事务的GTID--下图中蓝色框内标记的值

 cat /tmp/mysql/xtrabackup_binlog_info 
mysql-bin.003527	608322706	826a210e-3546-11eb-ae86-005056af2ea1:1-720939282

恢复主从同步,在从库上执行如下命令:

# 清空本地主从同步信息
mysql> RESET MASTER;
mysql> RESET SLAVE ALL;
# 设置从库的GTID_PURGED
mysql> SET GLOBAL GTID_PURGED='826a210e-3546-11eb-ae86-005056af2ea1:1-720939282';
# 设置同步状态
mysql > change master to
master_host='172.16.27.201',
master_port=3306,
master_user='slave',
master_password='xxxxxx',
MASTER_AUTO_POSITION = 1;

#启动从库同步
mysql> START SLAVE;
#查看同步状态
mysql> SHOW SLAVE STATUS\G;

评论