【问题标题】:create table as select working even with enforce-gtid-consistency即使使用enforce-gtid-consistency,也可以将表创建为选择工作
【发布时间】:2017-11-21 08:23:17
【问题描述】:

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

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

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

即使文档明确指出:

由于启用 --enforce-gtid-consistency 时只能记录事务安全语句,因此此处列出的操作不能与此选项一起使用:

CREATE TABLE ... SELECT 语句

在谷歌云 mysql 实例上,ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT. 的相同语句失败。

show variables like '%gtid%' 在 docker mysql 和 google 云实例上返回相同的结果(并且两者都启用了 enforce_gtid_consistency)。

【问题讨论】:

    标签: mysql docker docker-compose google-cloud-sql


    【解决方案1】:

    您看到失败的主要原因是容器数据库中的 log-bin 为 NULL,尽管 gtid_mode 已打开且 enforce_gtid_consistency 已打开。所以你必须运行带有 log-bin set 的容器,另外设置这个还需要设置 server-id。下面是一个运行容器的示例,您应该能够在其中重现错误 - “ 错误 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

    干杯 拉吉

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-24
      • 2022-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多