使用XtraBackup工具实现MySQL不停机开启主从同步

概述

业务系统上线后,如果前期没有部署主从数据库,现在需要新增从数据库的话,一般需要先停止主数据库,然后将数据备份还原至从数据库,最后再配置主从。但这样就导致业务系统必须停机,对线上业务造成影响。
之前的文章《使用XtraBackup工具物理备份MySQL数据库》实现了对MySQL的热备份,《MySQL8配置主从同步(同步所有库)》实现了MySQL的主从同步。那么只需要结合一下,就可以实现开启MySQL的不停机主从同步。

原理

使用XtraBackup对主库进行物理备份,将备份文件拷贝至从数据库,在从数据库还原备份。还原后开启主从设置。主要注意的是:开启主从设置时需要设置master_log_filemaster_log_pos这两个参数,这两个参数不能在主库中执行show master status命令来查,这样会丢失数据,因为你在备份还原的过程中,主库可能也产生了新的数据。show master status命令查询这种方式只适合于停机状态下。
XtraBackup工具在备份时,记录了备份时主库的日志位置,只需要在备份中查看xtrabackup_binlog_info文件,然后将文件中记录的日志信息填写到master_log_filemaster_log_pos,这样才能保证主从数据的一致。

实战

准备工作

1.从库安装一个全新的MySQL数据库,确保从库的MySQL的大版本与主库的一致(例如主库是8.0.x,那么从库也是8.0开头的版本)。
2.在主库和从库的服务器上都先安装好XtraBackup工具,安装方法可以查看之前的文章《使用XtraBackup工具物理备份MySQL数据库

备份主库

xtrabackup --backup --user=backup --password=yourpassword --target-dir=/home/backup/

执行以上命令将数据库备份至/home/backup/目录。

拷贝备份文件至从库服务器

将主库上的/home/backup/目录中的内容拷贝至从库的/home/backup/目录。

在从库上还原

还原前停止从库上MySQL服务并清空从库上的data文件夹。
依次执行以下命令进行还原:

xtrabackup --prepare --target-dir=/home/backup/
xtrabackup --copy-back --target-dir=/home/backup/

修改data目录权限

chown -R mysql:mysql /www/server/data

如果你的data目录不是在/www/server/data,那么需要自行更改。

配置从库

在从库的mysql配置文件my.cnf中添加或修改如下参数:
注意server-id不能与主库相同

[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id=2
replicate-ignore-db=mysql,sys,performance_schema,information_schema
log-slave-updates
slave-skip-errors=all

启动从库MySQL服务

systemctl start mysql.service

配置同步

配置同步账号

在主库中添加用于读取主库日志的账号:

SET SQL_LOG_BIN=0;
CREATE USER slaveuser@'%' IDENTIFIED WITH mysql_native_password BY 'password';
grant replication slave on *.* to slaveuser@'%';
flush privileges;
SET SQL_LOG_BIN=1;

设置还原点

登录从库服务器,查看备份时的还原点信息:

cat /home/backup/xtrabackup_binlog_info

登录从库MySQL,配置同步:

stop slave;
change master to master_host='主库的IP',master_port=3306,master_user='slaveuser',master_password='password',master_log_file='mysql-bin.000005', master_log_pos=753117;
start slave;

master_log_file及master_log_pos的信息从/home/backup/xtrabackup_binlog_info中获取。

查看同步状态

登录从库执行以下语句:

show slave status

如果Slave_IO_RunningSlave_SQL_Running的值都是Yes,说明配置成功。

参考

https://docs.percona.com/percona-xtrabackup/8.0/howtos/setting_up_replication.html

发表评论

邮箱地址不会被公开。 必填项已用*标注