• 【MySQL】MySQL5.7传统复制切换为GTID复制


     

    【MySQL】MySQL5.7传统复制切换为GTID复制


     

    前言:最近还是在做MariaDB10.1.12升级为MySQL5.7的升级方案,其中有一个环节涉及到传统复制到GTID复制的在线切换,本文就介绍下如何是现在线切换。

    一、参数解析

    下面对GTID_MODE变量如下解释:

    解释
    OFF 新事务是非GTID, Slave只接受不带GTID的事务,传送来GTID的事务会报错
    OFF_PERMISSIVE 新事务是非GTID, Slave即接受不带GTID的事务也接受带GTID的事务
    ON_PERMISSIVE 新事务是GTID, Slave即接受不带GTID的事务也接受带GTID的事务
    ON 新事务是GTID, Slave只接受带GTID的事务

    我们在更改GTID_MODE时不可直接跳跃更改,否则会提示报错

    root@localhost [xucl]>set global gtid_mode=ON;
    ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
    

    二、在线更改

    1.将enforce_gtid_consistency设置为WARNING,主库从库都要设置,无先后顺序。

    set @@global.enforce_gtid_consistency=warn;
    

    注意:执行完这条语句后,如果出现GTID不兼容的语句用法,在错误日志会记录相关信息,那么需要调整应该程序避免不兼容的写法,直到完全没有产生不兼容的语句,可以通过应用程序去排查所有的sql,也可以设置后观察错误日志一段时间,建议观察过,这一步非常重要。

    2.将ENFORCE_GTID_CONSISTENCY设置为ON,主库从库都要设置,无先后顺序。

    set @@global.enforce_gtid_consistency=on;
    

    3.设置GTID_MODE为off_permissiv,主库从库都要设置,无先后顺序。

    SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
    

    4.设置GTID_MODE为on_permissiv,主库从库都要设置,无先后顺序。

    SET @@GLOBAL.GTID_MODE = on_permissive;
    

    5.主从检查变量ONGOING_ANONYMOUS_TRANSACTION_COUNT

    SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
    

    需要等到该变量为0

    6.确保所有的匿名事务(非GTID事务)已经被完全复制到所有的server上。
    主库

    show master status;
    

    从库

    show slave statusG
    

    确保事务在从库都会放完毕
    或者:

    SELECT MASTER_POS_WAIT('mysql-bin.00000x', xxx);
    

    7.确认整个拓扑结构中已经没有匿名事务的存在,如之前产生的所有匿名事务已经全部被执行完毕,甚至二进制日志中也不要有匿名事务,可以通过flush logs,并让mysql来自动清理旧的二进制日志文件。

    8.设置GLOBAL.GTID_MODE为ON,主库从库都要设置,无先后顺序。

    SET @@GLOBAL.GTID_MODE = ON;
    

    9.my.cnf增加GTID_MODE = ON;

    至此,GTID复制在线切换完成。

  • 相关阅读:
    Servlet三种实现方法(四)
    Tomcat 网站部署(三)
    MySQL表的增删改查和列的修改(二)
    Tomcat的目录结构(二)
    addEventListener,attachEvent
    DOM事件流
    函数内部的函数中的this都是指向window
    css3 translate属性
    parent,parents和closest
    each用法
  • 原文地址:https://www.cnblogs.com/yangyongchao/p/12335221.html
Copyright © 2020-2023  润新知