• MySQL使用空事务解决slave从库errant问题


    MySQL集群一般部署为主从架构,主库专门用于写入数据,从库用于读数据。

    异常情况下,在从库上写入数据,就会出现主从数据不一致问题,称为errant。

    如果从库上的这些数据主库上已经有了,或者主库不需要这些数据,我们就可以使用空事务解决errant问题。

    接下来,本文介绍如何使用空事务解决errant问题。

    首先查看主库的GTID集合:

    >show master statusG
    *************************** 1. row ***************************
                 File: mysql-bin.000001
             Position: 7685
         Binlog_Do_DB:
     Binlog_Ignore_DB:
    Executed_Gtid_Set: b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:1-17,
    c84e52d2-c2fa-11e9-9b19-002211f26ad8:1,
    dea2c515-c2fa-11e9-9eef-0022a6d40ab9:1-6
    1 row in set (0.00 sec)
    
    

    查看从库的GITD集合:

    >show master statusG
    *************************** 1. row ***************************
                 File: mysql-bin.000001
             Position: 9783
         Binlog_Do_DB:
     Binlog_Ignore_DB:
    Executed_Gtid_Set: b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:1-23,
    c84e52d2-c2fa-11e9-9b19-002211f26ad8:1,
    dea2c515-c2fa-11e9-9eef-0022a6d40ab9:1-6
    1 row in set (0.02 sec)
    

    找到主库从库的差异:
    b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:18-23
    这些GTID是主库上没有的。

    在主库上使用空事务进行补齐:

    >SET GTID_NEXT='b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:18';
    Query OK, 0 rows affected (0.00 sec)
    
    >BEGIN;
    Query OK, 0 rows affected (0.00 sec)
    
    >COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    
    >SET GTID_NEXT='b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:19';
    Query OK, 0 rows affected (0.00 sec)
    
    >BEGIN;
    Query OK, 0 rows affected (0.01 sec)
    
    >COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    
    >SET GTID_NEXT='b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:20';
    Query OK, 0 rows affected (0.00 sec)
    
    >BEGIN;
    Query OK, 0 rows affected (0.01 sec)
    
    >COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    
    >SET GTID_NEXT='b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:21';
    Query OK, 0 rows affected (0.00 sec)
    
    >BEGIN;
    Query OK, 0 rows affected (0.01 sec)
    
    >COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    
    >SET GTID_NEXT='b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:22';
    Query OK, 0 rows affected (0.00 sec)
    
    >BEGIN;
    Query OK, 0 rows affected (0.01 sec)
    
    >COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    
    >SET GTID_NEXT='b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:23';
    Query OK, 0 rows affected (0.00 sec)
    
    >BEGIN;
    Query OK, 0 rows affected (0.01 sec)
    
    >COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    
    
    >SET GTID_NEXT='AUTOMATIC';
    Query OK, 0 rows affected (0.00 sec)
    
    

    最后,查看主库上的GTID集合:

    >show master statusG
    *************************** 1. row ***************************
                 File: mysql-bin.000001
             Position: 9783
         Binlog_Do_DB:
     Binlog_Ignore_DB:
    Executed_Gtid_Set: b7a7c5c5-c2fa-11e9-8bd0-0022bf5315f2:1-23,
    c84e52d2-c2fa-11e9-9b19-002211f26ad8:1,
    dea2c515-c2fa-11e9-9eef-0022a6d40ab9:1-6
    1 row in set (0.02 sec)
    

    可以看到,事务集合已经补齐。

  • 相关阅读:
    windows下启动数据库、创建数据表、角色等
    直播流的来源
    win10如何查看已保存的账号信息
    Tomcat+IDEA
    线程安全-Spring Bean 作用域类型(Scope)
    ECMAScript6学习-2.1let与const
    解决Mac上Android开发时adb连接不到手机问题
    8个不可不知的Mac OS X专用命令行工具(转)
    ios 中获得应用程序名称和版本号
    iPhone 6 图像渲染揭秘(转)
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/11695505.html
Copyright © 2020-2023  润新知