mysql不停库做GTID主从复制

前言

今天把公司测试数据库做了GTID的主从,但是当时没有停止主库,直接通过xtrabackup进行备份,然后把数据恢复到从库,然后直接执行start salve进行主从复制,发现总是报如下之类的错误:

解决办法

折腾了一下午,上网查了n多资料之后发现这个问题还是有办法解决的,而且解决这个问题之后还可以做到不停库进行主从复制的配置。

  1. 首先主库通过xtrabackup进行备份,我采用如下命令innobackupex -uxxxx -pxxxx . --stream=tar|gzip -> backup.tar.gz直接备份成tar.gz的格式,然后传到从库服务器;
  2. 从库直接tar解压压缩文件到数据库目录tar xvf *.tar.xz /usr/local/mysql/data/,我发现xtrabackup --copy-back也可以使用cp或者rsync替换,我此处直接就解压到数据目录了;
  3. 执行--apply-log进行事务回滚,此步骤一定要做,然后修改数据目录属主属组,启动数据库;
  4. 此步骤非常重要,数据恢复完成之后在数据目录有xtrabackup_binlog_info文件,内容如下:

    三个字段,第一个是已经应用到哪个二进制日志;第二个是当前的pos,如果不是gtid主从则指定pos的时候指定这个即可;第三个是备份已经包含的事务,所以从库启动主从之前需要先执行set @@global.gtid_purged='xxxxxx:xx'命令跳过备份项,否则会出现我之前出现的错误。
  5. 执行set @@global.gtid_purged='xxxxxx:xx'发现报错了,错误如下:ERROR 1840 (HY000): Unknown error 1840,上网查询资料发现可以执行reset master,然后就能够正常执行命令跳过备份包含的gtid了;
  6. 然后再执行change master to 命令开始主从即可。
  7. 如果之前已经配置过主从,则可以通过reset slave all清除所有的主从配置信息。

    总结

    经过一下午的折腾发现还是对数据库不够了解,对GTID和数据库的事务总是迷迷糊糊的,还有很多需要学习的地方。
    参考了这两篇文章,感谢作者:
    https://www.cnblogs.com/abobo/p/4242417.html
    http://blog.51cto.com/arthur376/1792551

猜你喜欢

转载自www.cnblogs.com/stacks/p/9274696.html
今日推荐