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

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 17:19:51

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

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

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

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

首先查看主库的GTID集合:

>show master status\G
*************************** 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 status\G
*************************** 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 status\G
*************************** 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)

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!