create table as select 即使使用 enforce-gtid-consistency 也能工作

create table as select working even with enforce-gtid-consistency

我有一个 sql 脚本,其中包含语句 create tbl2 as select * from tbl;

此语句适用于 docker mysql 版本 5.7(当前为 5.7.19),即使启用了 enforce-gtid-consistency。 docker compose yml 中的相关行是:

image: mysql:5.7
command: --gtid-mode=ON --enforce-gtid-consistency=true

即使文档明确指出:

Since only transactionally safe statements can be logged when --enforce-gtid-consistency is enabled, it follows that the operations listed here cannot be used with this option:

CREATE TABLE ... SELECT statements

同一语句在 google 云 mysql 实例上因 ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT. 而失败。

show variables like '%gtid%' returns docker mysql 和 google 云实例上的相同结果(并且 enforce_gtid_consistency 在两者上都打开).

您看到失败的主要原因是 log-bin 在容器数据库中为 NULL,尽管 gtid_mode 已打开且 enforce_gtid_consistency 已打开。所以你必须 运行 设置 log-bin 的容器,另外设置这个也需要设置 server-id。下面是 运行 容器的一个示例,您应该可以在其中重现错误 - ” 错误 1786 (HY000):语句违反 GTID 一致性:CREATE TABLE ... SELECT。 “

docker 运行 -d --name=my-mysql --env="MYSQL_ROOT_PASSWORD=rootpassword123" --publish 3306:3306 --volume=/u01/mysql:/var/lib/mysql mysql/mysql-server:5.7.20 --gtid_mode=ON --enforce_gtid_consistency=ON --log-bin=mysql-bin -- master-info-repository=table --relay-log-info-repository=table --server-id=1

干杯 拉杰