我有一个包含语句create tbl2 as select * from tbl;
此语句适用于版本为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都已启用)。
答案 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
欢呼声 拉吉