概述
业务系统上线后,如果前期没有部署主从数据库,现在需要新增从数据库的话,一般需要先停止主数据库,然后将数据备份还原至从数据库,最后再配置主从。但这样就导致业务系统必须停机,对线上业务造成影响。
之前的文章《使用XtraBackup工具物理备份MySQL数据库》实现了对MySQL的热备份,《MySQL8配置主从同步(同步所有库)》实现了MySQL的主从同步。那么只需要结合一下,就可以实现开启MySQL的不停机主从同步。
原理
使用XtraBackup对主库进行物理备份,将备份文件拷贝至从数据库,在从数据库还原备份。还原后开启主从设置。主要注意的是:开启主从设置时需要设置master_log_file
和master_log_pos
这两个参数,这两个参数不能在主库中执行show master status
命令来查,这样会丢失数据,因为你在备份还原的过程中,主库可能也产生了新的数据。show master status
命令查询这种方式只适合于停机状态下。
XtraBackup工具在备份时,记录了备份时主库的日志位置,只需要在备份中查看xtrabackup_binlog_info
文件,然后将文件中记录的日志信息填写到master_log_file
和master_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_Running
和Slave_SQL_Running
的值都是Yes
,说明配置成功。
参考
https://docs.percona.com/percona-xtrabackup/8.0/howtos/setting_up_replication.html