XtraBackup恢复MySQL双主模式的数据同步

一、问题背景

业务数据库使用的 MySQL+keepalived 双主架构。

因某种原因,MySQL主从同步除了问题,而之前没有监控,一般操作已经无法让从同步主库了。

使用XtraBackup,可以在不影响主库工作的同时,让从库数据库恢复同步主库

 

二、实验环境

 

mysql01    192.168.1.110

mysql02    192.168.1.120

vip              192.168.1.130

 mysql安装教程

数据库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  

 

注:

1. mysql_backup 如果不存在,还自动创建

2. 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. 使用主库应用mysql二进制日志还原从库数据

 

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/

# 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 文件区别



posted @ 2021-11-17 08:54  DB哥  阅读(190)  评论(0编辑  收藏  举报