实验环境

此次实验的环境如下

  • MySQL 5.7.25

  • Redhat 6.10

  • 操作系统账号:mysql

  • 数据库复制账号:repl

  • 复制格式:基于行的复制

IP地址 主从关系 复制账号 复制格式
11.12.14.29 主库 repl Row-Based
11.12.14.30 从库(半同步) repl Row-Based

这节我们的内容为MySQL的复制,MySQL复制有两种形式

  • 基于二进制日志文件位置
  • 基于GTID

前面我们已经说完了两种形式的搭建方式,其中备份数据库使用的是mysqldump工具

如果碰到非常大数据库,使用mysqldump进行备份还原是很缓慢的,这时可以使用xtrabackup进行备份和还原

针对xtrabackup我们已经在上一期中说过了,有兴趣的可以去了解

本节内容只针对需要修改的阶段进行说明,其他阶段不变

1. 备份主库阶段

这里我们通过xtrabackup工具进行备份,而不是使用mysqldump

innobackupex  -S /oradata/data/mysql/data/mysql.sock --user=backup --password=123456   /oradata/data/mysql/xtra

备份完成在备份目录下有xtrabackup_binlog_info文件

1.png

该文件有所需的二进制文件位置及GTID信息

2. 拷贝备份文件至备库

scp -r /oradata/data/mysql/xtra/2019-06-26_15-03-50 root@11.12.14.30:/oradata/data/mysql/xtra/
chown -R mysql:mysql /oradata/data/mysql/xtra/2019-06-26_15-03-50

3.还原从库阶段

这里我们使用xtrabackup工具进行还原,而不是使用mysqldump

innobackupex --apply-log --use-memory=1G  /oradata/data/mysql/xtra/2019-06-26_15-03-50 

关闭数据库清空数据文件目录后执行copy-back

innobackupex --copy-back  /oradata/data/mysql/xtra/2019-06-26_15-03-50

4. 开启同步

这里根据备份文件的xtrabackup_binlog_info文件的内容进行同步

也可通过datadir目录下的xtrabackup_info文件查看

2.png

4.1 基于二进制文件位置

mysql> change master to master_host='11.12.14.29', master_user='repl', master_password='rpl',master_log_file='mysql-bin.000002',master_log_pos= 185333118;
mysql > start slave;

4.2 基于GTID的复制

mysql> reset master;
mysql>set  @@GLOBAL.GTID_PURGED='e99ae99a-811d-11e9-9ca2-0050568cef02:1-59387'
mysql> change master to master_host='11.12.14.29', master_user='repl', master_password='rpl',master_auto_position = 1;
mysql> start slave

5. 参考资料

http://www.zhaibibei.cn/mysql/tutorial/