zoukankan      html  css  js  c++  java
  • 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 命令开始主从即可。

    change master to
    master_host='ip',
    master_port=port,
    master_user='username',
    master_password='password',
    master_auto_position=1;
    ```

    1. 如果之前已经配置过主从,则可以通过reset slave all清除所有的主从配置信息。
    2. 一定要注意配置的顺序,必须是先执行global_purge,然后再执行change master to;

    总结

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

  • 相关阅读:
    iaas,paas,saas理解
    July 06th. 2018, Week 27th. Friday
    July 05th. 2018, Week 27th. Thursday
    July 04th. 2018, Week 27th. Wednesday
    July 03rd. 2018, Week 27th. Tuesday
    July 02nd. 2018, Week 27th. Monday
    July 01st. 2018, Week 27th. Sunday
    June 30th. 2018, Week 26th. Saturday
    June 29th. 2018, Week 26th. Friday
    June 28th. 2018, Week 26th. Thursday
  • 原文地址:https://www.cnblogs.com/stacks/p/9274696.html
Copyright © 2011-2022 走看看