MySQL集群主从切换后的数据同步及恢复主从关系流程
MySQL数据库集群因故障发生主从切换后,为了保证数据一致性,需要同步在切换后可能产生的数据差异,并恢复主从关系。
所需工具
innobackupex(XtraBackup)
工具安装
该工具在各大Linux公有源中都提供有安装包一键部署。请参考官方说明:
环境说明
两台同版本的MySQL数据库服务器:A和B。原关系为A主(Master)B从(Slave),后发生切换。
数据库默认信息:
- 配置文件位置:/etc/my.cnf
- 端口:3306
- 数据库实例用户名:root
- 数据库实例密码:password
- MySQL运行用户:mysql
- 数据库存储路径:/mysql/data/
操作步骤
1. 使用innobackupex工具,对B的数据库进行热备至/backup目录:
$ innobackupex --defaults-file=/etc/my.cnf --host=localhost --port=3306 --user=root --password=password /backup
记录下输出日志中master_log_pos
所对应的同步位置。
2. 使用scp将热备文件从B传至A:
$ scp -r /backup/ root@{A_IP}:/backup/
3. 根据实际需求,更正目录权限:
$ chown -R mysql:mysql /backup/
4. 使用innobackupex工具向A在线导入备份:
#先将数据库日志导入至缓存 $ innobackupex --user=root --apply-log /backup/ #移除A上的原数据库文件(可以先备份) $ cd /mysql/ $ mv data data_old $ mkdir data $ chown -R mysql:mysql data #导入数据库 #此处“--defaults-file”参数必须位于首位,否则会报错 $ innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /mysql/data/
5. 重启A上的MySQL服务:
$ service mysqld stop $ service mysqld start
6. 重建主从关系(切换后为B主A从):
其中master_log_file
对应B当前使用的日志文件,master_log_pos
为第一步中记录的同步位置。
$ mysql -uroot -ppassword mysql> change master to master_host='{B_IP}',master_port=3306,master_user='root',master_password='password',master_log_file='mysql-master-bin.00000X',master_log_pos=XXXX; mysql> start slave; mysql> show slave status \G;
跟踪一段时间,确认数据库同步状态正常即可。
— END —