MySQL集群主从切换后的数据同步及恢复主从关系流程

Posted on

 Translate this page into English

MySQL数据库集群因故障发生主从切换后,为了保证数据一致性,需要同步在切换后可能产生的数据差异,并恢复主从关系。

所需工具

innobackupex(XtraBackup)

工具安装

该工具在各大Linux公有源中都提供有安装包一键部署。请参考官方说明:

https://www.percona.com/doc/percona-xtrabackup/LATEST/installation.html#installing-percona-xtrabackup-from-repositories

环境说明

两台同版本的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

0