-
GTID是什么:
GTID(Global Transaction Identifier,全局事务标识符)是一个在MySQL复制环境中用于唯一标识事务的标识符。它由两部分组成:server_uuid
和transaction_id
。server_uuid
是数据库实例在启动时自动生成的唯一标识,保存在auto.cnf
文件中。transaction_id
是事务执行的序列号。 -
什么时候产生GTID值:
GTID是在事务提交时生成的。当事务执行到COMMIT阶段,并且GTID模式(gtid_mode
)设置为ON或ON_PERMISSIVE时,MySQL将生成一个新的GTID,并将其记录到二进制日志(binlog)中。 -
GTID的优势:
-
简化复制流程:在进行主从复制时,使用GTID无需手动寻找binlog的位点信息。通过设置
auto_position=1
,从服务器可以自动定位到主服务器上的位置,从而简化复制流程。 - 增强数据一致性:GTID确保每个事务在整个复制环境中只被执行一次,避免了重复执行或遗漏执行事务的风险,从而维护了数据的一致性。
-
简化复制流程:在进行主从复制时,使用GTID无需手动寻找binlog的位点信息。通过设置
-
binlog记录:
每个binlog文件的开头都包含了之前所有已提交事务的GTID集合。这使得从服务器能够轻松地同步主服务器的状态,因为从服务器可以通过GTID来识别并应用缺失的事务。 -
GTID相关的变量:
-
executed_gtid_set
:表示已经在主服务器上执行过的GTID集合。-
RESET MASTER
会清空executed_gtid_set和purged_gtid_set的值 - 只有该项为空的时候才能执行
SET PURGE_GTID_SET
。 - 该变量不能手动进行设置,所以需要设置SET @@global.gtid_purged
-
executed_gtid_set
包含purged_gtid_set
中的GTID,即已执行的GTID集合包含了已被清理的GTID集合。
-
-
purged_gtid_set
:表示已经被清理(删除)的GTID集合。这些GTID对应的事务已经被从binlog中删除,并且不再需要被复制到从服务器。
-
-
如何跳过复制错误:
当从服务器在复制过程中遇到错误时,可以通过以下步骤跳过该错误:- stop slave。
SET @@SESSION.GTID_NEXT='要跳过的GTID'
。
-BEGIN; COMMIT`。 - SET @@SESSION.GTID_NEXT='AUTOMATIC'`
- START SLAVE`。
- stop slave。
-
搭建新从库:
- 使用
RESET MASTER
命令删除所有二进制日志文件,并重置gtid_executed
集合。这将清除主服务器上的所有复制历史。 - 在从服务器上设置正确的已执行GTID集合(通过
SET @@global.gtid_purged = '你的GTID集合'
)。这将确保从服务器与主服务器具有一致的复制状态。
- 使用
网友评论