mysql gtid深入_深入理解 MySQL GTID

深入理解 MySQL GTID

GTID 的概念

何为 GITD

GTID(global transaction identifier) 是全局事务标识符, 在 MySQL5.6 版本中作为一个超级特性被推出. 事务标识不仅对于 Master(起源) 的服务器来说是惟一的, 而且在整个复制拓扑架构来说, 也是全局唯一的.

1.GTID 的格式

GTID = source_id:transaction_id

GTID 分为两部分, source_id 和 transaction_id.source_id 是通过使用 MySQL 服务的 server_uuid 来表示 .transaction_id 是在事务提交的时候由系统顺序分配的一个序列号.

使用 show master status 查看当前实例执行过的 GTID 事务信息. 如下:(root@localhost)[Ztest]>show master status\G;

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

File:mysql-bin.000005

Position:1959

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:4160e9b3-58d9-11e8-b174-005056af6f24:1-10

1rowinset(0.00sec)

可以看出, 本实例的 source_id 为 4160e9b3-58d9-11e8-b174-005056af6f24,transaction_id 为 1-10, 说明是提交了 10 个事务.

MySQL 数据库服务的 uuid 的查询方式.(root@localhost)[(none)]>show GLOBAL VARIABLES like'server_uuid';

+---------------+--------------------------------------+

|Variable_name|Value|

+---------------+--------------------------------------+

|server_uuid|4160e9b3-58d9-11e8-b174-005056af6f24|

+---------------+--------------------------------------+

1rowinset(0.02sec)

2.GTID 的集合

GTID 集合是一组全局事务标识符, 格式如下:gtid_set:

uuid_set[,uuid_set]...

|''

uuid_set:

uuid:interval[:interval]...uuid:

hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh

h:

[0-9|A-F]

interval:

n[-n]

(n>=1)

3.GTID 的管理

MySQL 库中新增了 gtid_exectued 表, 在 MySQL 8.0 中表结构如下:(root@localhost)[(none)]>usemysql

Databasechanged

(root@localhost)[mysql]>show create table gtid_executed \G;

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

Table:gtid_executed

CreateTable:CREATE TABLE`gtid_executed`(

`source_uuid`char(36)NOT NULL COMMENT'uuid of the source where the transaction was originally executed.',

`interval_start`bigint(20)NOT NULL COMMENT'First number of interval.',

`interval_end`bigint(20)NOT NULL COMMENT'Last number of interval.',

PRIMARY KEY(`source_uuid`,`interval_start`)

)/*!50100 TABLESPACE `mysql` */ENGINE=InnoDBDEFAULT CHARSET=utf8

1rowinset(0.00sec)

查看目前已经执行过的事务, 语句如下:(root@localhost)[mysql]>select*fromgtid_executed;

+--------------------------------------+----------------+--------------+

|source_uuid|interval_start|interval_end|

+--------------------------------------+----------------+--------------+

|4160e9b3-58d9-11e8-b174-005056af6f24|1|26|

+--------------------------------------+----------------+--------------+

1rowinset(0.01sec)

可以分析

当未开启 binlog 时, 每个事务会记录到 gitd_executed 表中.

当开启 binlog 时, 事务不会立即写入 gitd_executed 表中, 只有当 Binlog rotate 轮询时亦或者数据库服务关闭时, 会把事务写入至 gtid_executed 表中.

实验效果如下:

1. 插入数据前的 gtid_executed 表的情况:(root@localhost)[mysql]>select*fromgtid_executed;

+--------------------------------------+----------------+--------------+

|source_uuid|interval_start|interval_end|

+--------------------------------------+----------------+--------------+

|4160e9b3-58d9-11e8-b174-005056af6f24|1|26|

+--------------------------------------+----------------+--------------+

1rowinset(0.01sec)

2. 插入准备数据:insertintoztest.zstudent(stu_name,sex)values('hrd30','M');

insertintoztest.zstudent(stu_name,sex)values('hrd31','M');

commit;

3. 插入数据后的 gtid_executed 表的情况:(root@localhost)[mysql]>select*fromgtid_executed;

+--------------------------------------+----------------+--------------+

|source_uuid|interval_start|interval_end|

+--------------------------------------+----------------+--------------+

|4160e9b3-58d9-11e8-b174-005056af6f24|1|26|

+--------------------------------------+----------------+--------------+

1rowinset(0.00sec)

如上情况, 没有任何改变, Binlog rotate 后, 查看 gtid_executed 表的情况(root@localhost)[mysql]>flush logs;

QueryOK,0rows affected(0.01sec)

(root@localhost)[mysql]>select*fromgtid_executed;

+--------------------------------------+----------------+--------------+

|source_uuid|interval_start|interval_end|

+--------------------------------------+----------------+--------------+

|4160e9b3-58d9-11e8-b174-005056af6f24|1|28|

+--------------------------------------+----------------+--------------+

1rowinset(0.00sec)

可以看到, 上述提交的两个事务, 在 binlog 刷新之后, 写入到了 gitd_executed 表中.

知识点备注:

RESET MASTER 会清空 gitd_executed 表.

Linux 公社的 RSS 地址: https://www.linuxidc.com/rssFeed.aspx

来源: http://www.linuxidc.com/Linux/2018-06/152857.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值