Error number: 4066; Symbol: ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY; SQLSTATE: HY000
Message: REQUIRE_ROW_FORMAT cannot be disabled for replication channel ‘%s’ when GTID_ONLY=1.
错误说明
MySQL出现错误4066,这个错误也被称为ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY,SQLSTATE是HY000。这意味着一个未指定的会话尝试从会话中禁用要求的执行格式,但GTID模式已经启用。本错误是版本5.7.9引入的。
常见案例
当MySQL复制代理尝试禁用会话执行格式时,会出现此错误。此错误在设置新主机时特别常见,对必须满足唯一性要求的master-slave复制安装也特别常见。
解决方法
最简单的解决办法是禁用GTID模式,然后再禁用会话格式。这可以通过在my.cnf文件指定相应设置变量或运行SET多节点语句来实现。
例如,可以在my.cnf配置文件中添加:
gtid-mode=OFF
transaction-isolation=READ-COMMITTED
或者,可以在会话中运行以下命令:
SET GLOBAL gtid_mode = OFF;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
禁用GTID模式确保记录的原子性,避免在master-slave复制中出现重复的记录。
另外,可以尝试通过将gtid_mode设置为ON_PERMISSIBILITY并不断尝试重启MySQL来更轻松地禁用会话格式,不过我觉得这种情况下更容易出错。
无论哪种办法,都可以解决ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY错误。