mysql不停库作GTID主从复制

前言

今天把公司测试数据库作了GTID的主从,可是当时没有中止主库,直接经过xtrabackup进行备份,而后把数据恢复到从库,而后直接执行start salve进行主从复制,发现老是报以下之类的错误:html

解决办法

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

  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了;sql

  6. 而后再执行change master to 命令开始主从便可。数据库

    change master to
    master_host='ip',
    master_port=port,
    master_user='username',
    master_password='password',
    master_auto_position=1;
  7. 若是以前已经配置过主从,则能够经过reset slave all清除全部的主从配置信息。
  8. 必定要注意配置的顺序,必须是先执行global_purge,而后再执行change master to;服务器

总结

通过一下午的折腾发现仍是对数据库不够了解,对GTID和数据库的事务老是迷迷糊糊的,还有不少须要学习的地方。
参考了这两篇文章,感谢做者:
http://www.javashuo.com/article/p-oiyqmdti-bc.html
http://blog.51cto.com/arthur376/1792551app

相关文章
相关标签/搜索