Error number: 4069; Symbol: ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS; SQLSTATE: HY000
Message: When disabling SOURCE_AUTO_POSITION FOR CHANNEL ‘%s’ you must provide SOURCE_LOG_FILE and SOURCE_LOG_POS as source positions are invalid.
错误说明
ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS是MySQL服务器的一个内部错误代码,它表明当使用’CHANGE REPLICATION SOURCE’语句改变复制的源时,MySQL服务器无法将 auto_position标志禁用,因为没有确认可用的 binlog位置。
常见案例
当一台MySQL服务器添加为复制上级服务器时,若此服务器上没有安装 GTID支持,该服务器将根据日志文件和偏移量来计算与上级服务器的位置以便同步,此时此服务器将设置其auto_position标志,此时如果管理员尝试使用 CHANGE REPLICATION SOURCE 来更改复制源,MySQL服务器将报告 ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS错误。
解决方法
这个错误可能会引发其他一些问题,首先,我们需要确保我们已经安装 GTID支持。如果已经安装,则应将 auto_position标志禁用,以便确保管理员能够更改复制源:
CHANGE REPLICATION SOURCE TO MASTER_HOST = ‘replrepl_host’, MASTER_PORT = 3306, MASTER_USER = ‘repl_user’, MASTER_PASSWORD = ‘password’, MASTER_AUTO_POSITION = 0;
就此而言,如果我们无法安装 GTID支持,则应尝试使用复制偏移量以将复制源更改为使用文件和偏移量进行同步:
CHANGE REPLICATION SOURCE TO MASTER_HOST = ‘replrepl_host’, MASTER_PORT = 3306, MASTER_USER = ‘repl_user’, MASTER_PASSWORD = ‘password’, MASTER_LOG_FILE = ‘repl_log_file’, MASTER_LOG_POS = 0;
如果以上操作都无法解决该问题,则可以尝试强制更改复制源:
STOP SLAVE;
CHANGE REPLICATION SOURCE TO MASTER_HOST = ‘replrepl_host’, MASTER_PORT = 3306, MASTER_USER = ‘repl_user’, MASTER_PASSWORD = ‘password’, MASTER_AUTO_POSITION = 0 FORCE;
START SLAVE;
这样,MySQL服务器就可以正常更改复制源,而不会出现 ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS的错误了。