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;