MySQL GTID

GTID

这里主要简单描述下实现 GTID 遇到的问题

MySQL vs MariaDB

MariaDB 10.0.2 开始支持 GTID, MySQL 5.6 开始支持GTID,因为 MariaDB 是基于 MySQL 5.5.5, 因此 MariaDB 的 GTID 与 MySQL 的 GTID 姿势并不一样.

  • GTID 格式不一样
    • MySQL:
      • UUID SET
        • 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
        • server_uuid:interval
      • GTID SET
        • uuid_set[, uuid_set] ... | ''
    • MariaDB
      • 0-3306-123
      • DomainID-ServerID-Sequence
  • 开始 GTID 复制的流程不一样
    • MySQL
      • 使用 COM_BINLOG_DUMP_GTID 开始复制流程,在包中指定 GTID SET
      • COM_BINLOG_DUMP_GTID 是 5.6 支持的协议
    • MariaDB
-- 对于不同的复制需求,通过设置会话中的变量指定
-- 可通过抓包看到 MaraDB 开始复制的流程
-- 主要与 GTID 相关的变量
SET @mariadb_slave_capability = 4;-- 表明能接受 GTID
SET @slave_connect_state = '0-3311-90';-- 指定 GTID
-- 然后发送 REGISTER_SLAVE
-- MySQL 是发送 BINLOG_DUMP.REGISTER_SLAVE 是可选的
  • MariaDB 的 GTID 事件包与 MySQL 的不同,目前只有通过抓包分析.
  • MySQL 的协议有相对完善的文档, MariaDB 什么的协议,文档滴没有
    • MariaDB 大部分协议与 MySQL 相同, 但是这部分不同

Reference