共計 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 行業資訊頻道了解更多相關知識。