更新时间:2021-07-28 14:45:47
OFF
|
彻底关闭GTID,如果关闭状态的备库接受到带GTID的事务,则复制中断
|
OFF_PERMISSIVE
|
可以认为是关闭GTID前的过渡阶段,主库在设置成该值后不再生成GTID,备库在接受到带GTID 和不带GTID的事务都可以容忍
主库在关闭GTID时,执行事务会产生一个Anonymous_Gtid事件,会在备库执行:
SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’
备库在执行匿名事务时,就不会去尝试生成本地GTID了
|
ON_PERMISSIVE
|
可以认为是打开GTID前的过渡阶段,主库在设置成该值后会产生GTID,同时备库依然容忍带GTID和不带GTID的事务
|
ON
|
完全打开GTID,如果打开状态的备库接受到不带GTID的事务,则复制中断
|
Master GTID_MODE OFF OFF_PERMISSIVE ON_PERMISSIVE ON Slave GTID_MODE OFF Y Y N N OFF_PERMISSIVE Y Y Y Y* ON_PERMISSIVE Y Y Y Y* ON N N Y Y* N - Slave thread will stop with an error instead of connect Y - GTID_MODEs are compatible * - AUTO_POSITION can be used
GTID_NEXT AUTOMATIC AUTOMATIC ANONYMOUS UUID:NUMBER binlog on binlog off GTID_MODE OFF anonymous anonymous anonymous error OFF_PERMISSIVE anonymous anonymous anonymous UUID:NUMBER ON_PERMISSIVE new GTID anonymous anonymous UUID:NUMBER ON new GTID anonymous error UUID:NUMBER Legend: anonymous - Generate an anonymous transaction. error - Generate an error and fail to execute 'SET GTID_NEXT'. UUID:NUMBER - Generate a GTID with the specified UUID:NUMBER. new GTID - Generate a GTID with an automatically generated number.
WARN
|
在开启GTID之前,可以设置成WARN来观察实例负载中是否存在不兼容GTID的语句,当前包括:
CREATE TABLE ..SELECT
混合非事务和事务引擎的事务
在开启的事务中执行CREATE/DROP TEMPORARY TABLE
设置成WARN时,用户负载能保证正常,错误日志里会记录下来这些语句信息
|
ON
|
打开选项,上述的几种语句将给客户端返回错误。
由于动态设置该选项,我们考虑如下序列,
trx1 begin;
trx1 由于当前选项off,可以执行混合非事务引擎的事务
——另外一个session打开该选项
trx1 commit
为了解决这个问题,在内部检测到GTID不安全的语句时,使用一个计数器统计,只有该值为0时,才允许打开该选项
|
OFF
|
关闭该选项,则无法打开GTID_MODE
|
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;