2 min read

MySQL主/从重建

MySQL主/从重建

背景

总有那么些原因让你的MySQL主/从状态不一致,这时你就可以使用以下方式来重新建立你的主/从。

处理步骤

从主节点导出数据库

$ mysqldump -uroot --all-databases --add-drop-database --master-data=1 --single-transaction --triggers --routines >all_backup.sql

往从库中导入

slave> reset master;
slave> source all_backup.sql;
slave> start slave;
slave> show slave status \G

配置主从

change master to master_host='主节点IP',master_user='repl',master_password='密码',master_port=3306,master_auto_position=1;
提示:在没有执行reset slave all 之前,不需要执行这些。

使用Xtrabackup[推荐]

master节点

导出数据

# export xtb_opts='--user=用户名 --password="密码" --backup'
# xtrabackup $xtb_opts --target-dir=/data/backups/  

slave节点

假设已将备份好的数据传到Slave节点。

清理原数据

systemctl stop mysqld
rm -rf /var/lib/mysql/*

数据导入

-- 回滚日志
# xtrabackup --prepare --target-dir=/data/backups/

-- 恢复数据文件
# xxtrabackup --copy-back --parallel=16 --target-dir=/data/backups/

权限分配

# chown mysql.mysql /var/lib/mysql -R

启动服务

# systemctl start mysqld

主/从关系配置

> RESET MASTER;
> SET GLOBAL gtid_purged='5504c73f-1fc6-11ee-acb5-fa270007d1d5:1-1520930';
5.7 版本需要将MASTER信息清空及设置GTID(GTID 值在备份完成的时候会打印出来),8.0版本可以跳该步骤。
> change master to master_host='主节点IP',master_user='repl',master_password='密码',master_port=3306,master_auto_position=1;
> start slave ;

主从状态查看

> show slave status \G;

文献参考