一、问题背景
业务数据库使用的 MySQL+keepalived 双主架构。
因某种原因,MySQL主从同步除了问题,而之前没有监控,一般操作已经无法让从同步主库了。
使用XtraBackup,可以在不影响主库工作的同时,让从库数据库恢复同步主库
二、实验环境
mysql01 192.168.1.110
mysql02 192.168.1.120
vip 192.168.1.130
数据库root密码:MySQL@123
主从同步用户密码:repluser/Repl@123
三、下载安装XtraBackup
在mysql01和mysql02服务器
# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
# yum -y localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
四、数据同步操作
1. 停止主库mysql01与从库mysql02相互的数据同步
在mysql01 和mysql02 服务器上:
# mysql -u root -p "MySQL@123"
> stop slave
2. 在主库mysql01上备份
# /usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password="MySQL@123" --parallel=4 /opt/mysql_backup
# /usr/bin/innobackupex --apply-log --user=root --password="MySQL@123" /opt/mysql_backup/2021-03-22_20-33-22
注:2021-03-22_20-33-22 执行上述备份命令产生的目录名,跟执行的日期时间有关
3. 停止从库mysql02的mysql进程,删除或者重命名mysql02数据目录
在从库mysql02服务器上:
# systemctl stop mysqld
# cp -pr /opt/mysqldata /opt/mysqldata_bak
# rm -rf /opt/mysqldata/*
4. 使用主库应用日志还原从库数据
4.1 在mysql01服务器,拷贝主库备份目录到从库服务器一个临时目录(注意磁盘空间)
# scp -r /opt/mysql_backup/2021-03-22_20-33-22/ 192.168.1.120:/opt/mnt/
注:192.168.1.120为从库mysql02的IP
4.2 在mysql02服务器上,执行从库数据还原操作
# chown -R mysql:mysql /opt/mnt/2021-03-22_20-33-2/
# /usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /opt/mnt/2021-03-22_20-33-2/
或者直接拷贝
# cp -pr /opt/mnt/2021-03-22_20-33-2/* /opt/mysqldata/
# chown -R mysql:mysql /opt/mysqldata/
4.3 修改mysql02从库data目录属组权限
# chown -R mysql:mysql /opt/mysqldata
4.4 启动从库mysql02进程
# systemctl start mysqld
4.5 登录mysql02,记录master_log_file和master_log_pos值
# mysql -u root -p"MySQL@123"
> show master status\G;
4.6 在mysql02查看数据信息,记录master_log_file和master_log_pos值
# cat /opt/mnt/2021-03-22_20-33-22/xtrabackup_binlog_info
4.7 在mysql02从库上建立主从复制用户和授权
# mysql -u root -p"MySQL@123"
> GRANT REPLICATION SLAVE ON *.* to 'repluser'@192.168.1.110 identified by 'Repl@123';
注:192.168.1.110为主库mysql01的IP
4.8 在mysql02上开启同步mysql01操作
# mysql -u root -p"MySQL@123"
> change master to
master_host='192.168.1.110',
master_port=3306,
master_user='repluser',
master_password='Repl@123',
master_log_file='mysqld_bin.xxx', # 使用4.6步骤查到的数据
master_log_pos=xxx; # 使用4.6步骤查到的数据
> start slave;
4.9 主库同步从库操作
在mysql02服务器,在从上查看主从状态并记录
# mysql -u root -p"MySQL@123"
> show slave status\G;
注:此时的从库的pos位置信息(master_log_pos值)应该不变
在mysql01 服务器
# mysql -u root -p"MySQL@123"
> change master to
master_host='192.168.1.120',
master_port=3306,
master_user='repluser',
master_password='Repl@123',
master_log_file='mysqld_bin.xxx', # 使用4.6步骤查到的数据
master_log_pos=xxx; # 使用4.5步骤查到的数据
>start slave;
五、查看主库从库的数据同步状态
在mysql01 和 mysql02 服务器
# mysql -u root -p"MySQL@123" -e "show slave status\G;"
Slave_IO_Running和Slave_SQL_Running均显示Yes表示数据复制正常。
六、参考
How to setup a slave for replication in 6 simple steps with Percona XtraBackup
https://www.percona.com/doc/percona-xtrabackup/2.2/howtos/setting_up_replication.html
Percona Software Downloads
https://www.percona.com/downloads/
MySQL数据备份与恢复之Percona XtraBackup
https://blog.csdn.net/sinat_29214327/article/details/81517233
MySQL · 物理备份 · Percona XtraBackup 备份原理
http://mysql.taobao.org/monthly/2016/03/07
Xtrabackup 备份中 Xtrabackup_binlog_info 文件记录的 GTID 信息是否准确?
https://cloud.tencent.com/developer/article/1598332
MySQL 备份软件 Xtrabackup 的 xtrabackup_binlog_pos_innodb和xtrabackup_binlog_info 文件区别
https://www.cnblogs.com/liushuiwuqing/p/4014339.html