使用percona-xtrabackup工具解决mysql的主从同步问题
公司的项目上出现了主从同步异常问题,数据库比较大,所以采用了重做主从同步的方法。
Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表。
1. 确认操作系统版本
cat /etc/redhat-release # 公司使用的是centos,以centos7 为例
2 确认mysql版本
mysqld --help mysqld Ver 5.7.33 for Linux on x86_64 (MySQL Community Server (GPL)) Copyright (c) 2000, 2021, Oracle and/or its affiliates.
3. 下载对应版本的
https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
https://www.percona.com/doc/percona-xtrabackup/2.4/installation.html#installing-percona-xtrabackup-from-a-binary-tarball
因为我的虚拟机环境里是5.7的数据库 ,就下载安装了Percona XtraBackup 2.4 ,
在 https://www.percona.com/services/policies/percona-software-support-lifecycle 页面中可以查看xtrabackup对不同版本mysql的支持情况
percona xtrabackup 2.4 支持 mysql 5.7以下版本 ; percona xtrabackup 8.0 支持 mysql 8.0以上版本
# 下载
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 localinstall -y percona-xtrabackup-80-8.0.5-1.el7.x86_64.rpm
4. 全量备份
$ /usr/bin/innobackupex --defaults-file=${my.cnf} --socket=/tmp/mysql.sock --user=${user} --password=${password} /mnt/databak
# 注意: 备份数据使用的空间要大于主库目录的大小
# ${my.cnf}为配置文件地址 # ${user}和${password}变量为数据库账号和密码 # /mnt/databak 为备份存储目录。 # /tmp/mysql.sock 为mysql 的socket连接文件,可写可不写
#命令执行后会在 /mnt/databak/目录下生成对应的备份文件目录: /mnt/databak/2021-12-12_12-12-12
5. 预处理: 进行事务检查(也可以拷贝到从库后再进行检查)
$ innobackupex --defaults-file=${my.cnf} --user=${user} --password=${password} --socket=/tmp/mysql.sock --apply-log --use-memory=1G /mnt/databak/2021-12-12_12-12-12
# 指定 --use-memory 可以加快命令执行速度
6. scp备份目录到从库
scp -r /mnt/databak/2021-12-12_12-12-12 192.168.2.2://mnt/databak/
7. 关闭清理从库
systemctl stop mysqld rm -rf /path/mysql/datadir/* rm -rf /path/mysql/binlogs/* rm -rf /path/mysqlylogs/* # 具体路径可在mysql配置文件中看到
8. 恢复数据
innobackupex ---defaults-file=${my.cnf} --socket=/tmp/mysql.sock --user=${user} --password=${password} --copy-back /mnt/databak/2021-12-12_12-12-12
9. 设置权限并启动从库
chown -R mysql:mysql /path/mysql systemctl start mysqld
10. 恢复数据
# 查看主库中master位置 cat /mnt/databak/2021-12-12_12-12-12/xtrabackup_binlog_info fb-bin.001212 122222222 # 如果是新建主从,需在主库建立用户 mysql> grant replication slave,reload,super on *.* to repluser@192.168.3.13 identified by 'replpass'; mysql> FLUSH PRIVILEGES; # 登录从库,执行同步 mysql> change master to master_host=${host}, master_user=${user}, master_password=${password}, master_log_file='fb-bin.001212',master_log_pos=122222222; mysql> start slave; # 查看从库状态 mysql> show slave status\G; # 查看 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 是否正常 # 观察 Master_Log_File: 和 Relay_Master_Log_File