• 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

  • 相关阅读:
    编码标准之结构
    Python学习入门基础教程(learning Python)--6.3 Python的list切片高级
    dddd
    QT 多线程程序设计(也有不少例子)
    Qt多线程(有详细例子)
    mormort 土拨鼠,做后端服务那是杠杠的,基于http.sys
    每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行
    ASP.NET MVC的路由
    asp.net通用查询模块设计
    自定义Windows性能监视器
  • 原文地址:https://www.cnblogs.com/stacks/p/9274696.html
Copyright © 2020-2023  润新知