在线重建mysql从库

发布时间 2024-01-09 22:39:25作者: 凡人半睁眼

一、背景

1、当集群的mysql主从同步异常,使用xtrabackup工具从主库中备份的数据来恢复从库,使主从同步恢复正常

2、docker 部署mysql主从

3、systemd管理

4、启动文件

二、实操

在mysql slave节点操作

1、停止mysql服务

systemctl stop mysql_slave.service

2、重建mysql从库的数据卷

docker volume rm mysqls_data
docker volume rm mysqls_log
docker volume create mysqls_data
docker volume create mysqls_log

注意:清理目录后,不要再启动mysql从库服务

3、临时开放防火墙端口

firewall-cmd --zone=public --add-port=20000/tcp

4、开启接收服务

nc -l 20000|xbstream -x -C /healsci/docker/volumes/mysqls_data/_data/

5、主库操作

xtrabackup --defaults-file=/backup/mysql/mysql_master_my.cnf --backup --user=root --password=xxx --socket=/var/run/mysqld/mysqld.sock --datadir=/healsci/docker/volumes/mysqlm_data/_data/ --parallel=8 --compress --compress-threads=8 --stream=xbstream | nc node3 20000

备份期间,不能执行ddl操作,否则备份会失败。
当执行结束后,最后一行显示有 completed OK!,代表备份操作顺利完成。

6、在mysql从库节点执行以下命令:

firewall-cmd --zone=public --remove-port=20000/tcp

xtrabackup --decompress --remove-original --parallel=8 --target-dir=/heal/docker/volumes/mysqls_data/_data

xtrabackup --prepare --use-memory=4G --target-dir=/heal/docker/volumes/mysqls_data/_data

7、启动mysql从库

systemctl start mysql_slave.service

mysql -uroot -pxxx -S /var/run/mysqld/mysqld.sock

CHANGE MASTER TO MASTER_HOST='ip',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx;

MASTER_LOG_FILE和MASTER_LOG_POS值获取:

当用主库备份时,查询备份目录(/heal/docker/volumes/mysqls_data/_data/xtrabackup_info)文件中的binlog_pos行,对应filename和position

8、启动mysql主从同步

start slave;

show slave status\G;