即使使用enforce-gtid-consistency

时间:2017-11-21 08:23:18

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

我有一个包含语句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语句

同样的声明在Google云端mysql实例上以ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.失败。

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

1 个答案:

答案 0 :(得分:1)

您看到失败的主要原因是容器数据库中的log-bin为NULL,但gtid_mode已启用且enforce_gtid_consistency已启用。所以你必须运行带有log-bin设置的容器,另外还需要设置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

欢呼声 拉吉