返回顶部
首页 > 资讯 > 数据库 >说GTID - Auto-Positioning
  • 307
分享到

说GTID - Auto-Positioning

2024-04-02 19:04:59 307人浏览 独家记忆
摘要

GTID-based的复制,在初始化阶段,Slave节点会把已接收到的和提交的GTID集合信息,发送给Master节点。该GTID集合等价于后面两个GTID集合的并集,@@GLOBAL.gtid_execu

GTID-based的复制,在初始化阶段,Slave节点会把已接收到的和提交的GTID集合信息,发送给Master节点。该GTID集合等价于后面两个GTID集合的并集,@@GLOBAL.gtid_executed + perfORMance_schema.replication_connection_status.RECEIVED_TRANSACTION_SET。


Master节点通过对比Slave节点发送过来的GTID集合信息,然后把所有记录在现存二进制日志文件中的,没有在Slave节点上执行过的GTID集合,发送给Slave节点。



那么,Master节点是如何对比Slave节点发送过来的GTID集合信息的呢?


Master节点会按照自己有的UUID为准,将GTID集合分类,分别计算同类GTID集合的差集。此环节,若Master节点发现Slave节点发送过来的GTID集合中UUID的种类,比自身上UUID的种类多,Master节点会忽略该情况,复制逻辑还会继续进行。


实际例子如下,此情况复制是正常的。


Master节点上GTID集合信息:

[root@Mysql.sock][db1]> show master status\G

*************************** 1. row ***************************

             File: bin.000002

         Position: 796

     Binlog_Do_DB: 

 Binlog_Ignore_DB: 

Executed_Gtid_Set: 0c34233D-b2e1-11e9-85cf-080027f22add:1-2,

4fdc13e1-b59e-11e9-b5e0-080027f22add:1-2

1 row in set (0.01 sec)


Slave节点上GTID集合信息:

[root@mysql.sock][lg]> show master status\G

*************************** 1. row ***************************

             File: bin.000004

         Position: 832

     Binlog_Do_DB: 

 Binlog_Ignore_DB: 

Executed_Gtid_Set: 32a0c858-b59f-11e9-b069-0800270c3d91:1-2,

447e96e1-b59f-11e9-95fe-0800270c3d91:1-2,

b8282f18-b59e-11e9-83b0-0800270c3d91:1-5

1 row in set (0.00 sec)


建立复制关系后,Slave节点上集合信息:

[root@mysql.sock][lg]> show master status \G

*************************** 1. row ***************************

             File: bin.000004

         Position: 1763

     Binlog_Do_DB: 

 Binlog_Ignore_DB: 

Executed_Gtid_Set: 0c34233d-b2e1-11e9-85cf-080027f22add:1-2,

32a0c858-b59f-11e9-b069-0800270c3d91:1-2,

447e96e1-b59f-11e9-95fe-0800270c3d91:1-2,

4fdc13e1-b59e-11e9-b5e0-080027f22add:1-2,

b8282f18-b59e-11e9-83b0-0800270c3d91:1-5

1 row in set (0.00 sec)



又若Master节点发现Slave节点上相同UUID对应的GTID,比自身上的GTID多,这时Master节点会发送ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER报错给Slave节点。


实际例子报错如下:


Last_IO_Errno: 1236(MySQL error code 1236 (ER_MASTER_FATAL_ERROR_READING_BINLOG): Got fatal error %d from master when reading data from binary log: '%-.320s')

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave has more GTIDs than the master has, using the master's SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replica'

Last_SQL_Errno: 0


或Master节点发现计算出来相同UUID的GTID集合的差集中,有GTID已被删除了,这时Master节点会发送ER_MASTER_HAS_PURGED_REQUIRED_GTIDS报错给Slave节点。


实际例子报错如下:


Last_IO_Errno: 1236

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'

Last_SQL_Errno: 0



经过上面的逻辑后,Master节点最终得以将Slave节点需要的GTID集合(差集)发送过来,复制就这样开始了。

您可能感兴趣的文档:

--结束END--

本文标题: 说GTID - Auto-Positioning

本文链接: https://lsjlt.com/news/52528.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 说GTID - Auto-Positioning
    GTID-based的复制,在初始化阶段,Slave节点会把已接收到的和提交的GTID集合信息,发送给Master节点。该GTID集合等价于后面两个GTID集合的并集,@@GLOBAL.gtid_execu...
    99+
    2024-04-02
  • 说GTID - GTID的生命周期
    1.事务提交时会获取到一个GTID,该GTID将位于事务前面一同被记录到二进制日志中。若事务不被记录到二进制日志中,它也不会获取到GTID。2.事务的GTID会以Gtid_log_event的形式记录到二进...
    99+
    2024-04-02
  • 说GTID - GTID的组成和存储
    GTID是什么GTID(Global Transaction Identifier)是事务在第一次提交时获取到的唯一标识,该标识在整个的复制拓扑中具有唯一性。GTID组成GTID = source_id:t...
    99+
    2024-04-02
  • 说GTID - Failover and Scaleout
    在GTID-based复制中,如何扩容一个只读实例?这里使用mysqldump工具在Master节点上进行数据备份,注意一个关键参数:--set-gtid-purged[=name],该参数代表在备份文件中...
    99+
    2024-04-02
  • 说GTID - 清除GTID的执行历史
    RESET MASTER可以用来清除GTID的执行历史。如果想将一个执行过本地事务的节点,加入到Group Replication中,就要执行下RESET MASTER。执行RESET MASTER会带来以...
    99+
    2024-04-02
  • 说GTID - GTID-based复制中的限制
    同一个事务(语句)中,不能同时涉及事务和非事务数据表的变更,这会导致一个事务对应多个GTID,违反了事务与GTID的一对一对应原则。[root@mysql.sock][db1]> show creat...
    99+
    2024-04-02
  • 说GTID - 与GTID相关的系统变量
    gtid_next默认事务提交时,MySQL会为其生成一个GTID。当事务在Slave节点上回放时,使用的却是该事务在Master节点上产生的GTID,究其缘由和一个会话级系统变量gtid_next有关。若...
    99+
    2024-04-02
  • 说GTID - 与GTID相关的4个基本函数和使用场景
    4个基本函数1. GTID_SUBSET(set1,set2) - 若在set1中的GTID,也在set2中,返回true,否则返回false(set1是set2的子集)。[root@mysql.sock]...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作