MySQL GTID复制的优缺点分别是什么

56次阅读
没有评论

共计 1211 个字符,预计需要花费 4 分钟才能阅读完成。

MySQL GTID 复制的优缺点分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。
GTID 实际上是由 UUID+TID 组成的。其中 UUID 是一个 MySQL 实例的唯一标识。TID 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增, 最初由 google 实现,官方 MySQL 在 5.6 才加入该功能。
GTID 是事务提交时创建分配的唯一标识符,所有事务均与 GTID 一一映射。

GTID 的优点:
1. 根据 GTID 可以知道事务最初是在哪个实例上提交的
2.GTID 的存在方便了 Replication 的 Failover

GTID 的缺点:
1.GTID 模式实例和非 GTID 模式实例是不能进行复制的,要求非常严格,要么都是 GTID,要么都不是
2.gtid_mode 是只读的,要改变状态必须 1) 关闭实例、2)修改配置文件、3) 重启实例
3. 更新非事务引擎表
在同一事务中更新事务表与非事务表将导致多个 GTIDs 分配给同一事务

GTID 的三个限制:
enforce-gtid-consistency=ON 时,以下三类语句时不支持的

CREATE TABLE … SELECT statements

CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements inside transactions

Transactions or statements that update both transactional and nontransactional tables. There is an exception that nontransactional DML is allowed in the same transaction or in the same statement as transactional DML, if all nontransactional tables are temporary.

而实际上这个限制没有必要这么严格,

CREATE TABLE … SELECT statements

对于 binlog_format=row, gtid_next= automatic 时可以放开限制。
生成的 binlog 包含两个 GTID,一个是建表语句,一个是包含多个 insert 的事务。

事务中包含事务表和非事务表

对于 gtid_next= automatic 时可以放开限制。
生成的 binlog 包含两个 GTID,一个是所有非事务表的,一个是所有事务表的。
对 update 多表(包含事务表和非事务表)此时需额外要求 binlog_format=row。

关于 MySQL GTID 复制的优缺点分别是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计1211字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)