使用enforce-gtid-consistency参数时,create table as select仍可正常工作。

4

我有一个包含语句 create tbl2 as select * from tbl; 的 SQL 脚本。

这个语句在 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

即使文档清楚地指定了以下内容不能与 --enforce-gtid-consistency 选项一起使用,由于只有在事务安全语句被记录时,才能使用该选项进行日志记录,因此以下操作不能与该选项一起使用:
CREATE TABLE ... SELECT 语句。
在 Google Cloud MySQL 实例上,相同的语句会失败,并出现“ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.”的错误消息。
"show variables like '%gtid%'" 在 Docker MySQL 和 Google Cloud 实例上返回相同的结果(并且两者都开启了 enforce_gtid_consistency)。
1个回答

1
在容器数据库中启用gtid_mode和enforce_gtid_consistency, log-bin为NULL是失败的主要原因。因此,必须运行具有设置log-bin的容器,并另外设置server-id。以下是一个运行容器的示例,您可以在其中重现错误 -“ERROR 1786(HY000):语句违反了GTID一致性:CREATE TABLE ... SELECT。”
docker run -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
祝好, raj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接