说GTID——GTID-based复制中的限制

<李>

同一个事务(语句)中,不能同时涉及事务和非事务数据表的变更,这会导致一个事务对应多个GTID,违反了事务与GTID的一对一对应原则。


(root@mysql.sock) [db1]比;显示创建表t2 \ G

* * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行* * * * * * * * * * * * * * * * * * * * * * * * * * *

表:t2

创建表:创建表的t2 (

“id”int (11) NOT NULL AUTO_INCREMENT

主键(id)

)=MyISAM引擎AUTO_INCREMENT=3默认字符集=utf8mb4

1行组(0.00秒)


(root@mysql.sock) [db1]比;开始事务;

查询好,0行影响(0.00秒)


(root@mysql.sock) [db1]比;插入t1选择零;

查询好了,1行影响(0.00秒)

记录:1副本:0警告:0


(root@mysql.sock) [db1]比;插入t2选择零;

错误1785 (HY000):声明违反GTID一致性:更新非事务性表> <李>

不可以能使用创建表……选择语句。


(root@mysql.sock) [db1]比;创建表t2选择从t2 *;

错误1786 (HY000):声明违反GTID一致性:创建表……选择。




<李>

在事务,存储过程,函数和触发器中,不能使用创建临时表,和删除临时表语句。


(root@mysql.sock) [db1]比;开始事务;

查询好,0行影响(0.00秒)


(root@mysql.sock) [db1]比;创建临时表t4 (id int auto_increment主键),

错误1787 (HY000):声明违反GTID一致性:创建临时表和删除临时表> <李>

开启——enforce-gtid-consistency参数,阻止执行违反GTID-based复制原则的语句。



<李>

跳过事务的执行,参数sql_slave_skip_counter不再起作用,需要使用如下注入空事务的方式跳过。


设置GTID_NEXT=aaa-bbb-ccc-ddd: N的;


开始,

提交;


设置GTID_NEXT=远?



修改主语句中的IGNORE_SERVER_IDS不在起作用,已经回放过的事务会自动跳过。



<李>

在开启GTID的实例上使用,mysqldump导出数据时,在备份文件中会设置@@SESSION。SQL_LOG_BIN=0,当使用该备份文件向目标实例导入数据时,不记录二进制日志。



<李>

在开启GTID的实例上使用mysql_upgrade原地升级MySQL版本时,要不写二进制日志(这也是mysql_upgrade的默认行为,没开启——write-binlog)。


说GTID——GTID-based复制中的限制