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

  • 相关阅读:
    【Redis破障之路】四:Jedis基本使用
    【JVM进阶之路】十二:字节码指令
    Java学习之Spring MVC路由映射
    Java安全之FastJson JdbcRowSetImpl 链分析
    Allatori混淆动态调试分析
    Java工具开发手记
    Java安全之JBoss反序列化漏洞分析
    docker 应用篇————swarm[二十]
    docker 应用篇————docker-compose[十九]
    docker 应用篇————docker 自定义网络[十八]
  • 原文地址:https://www.cnblogs.com/stacks/p/9274696.html
Copyright © 2011-2022 走看看