MYSQL 5.1.73
我在同一台服务器上使用复制
my.cfg
server-id=1
report-host=master-is-slave-host
log-bin=myserver-binlog
relay-log=myserver-relaylog
replicate-same-server-id=1
binlog-do-db=pal_main
replicate-rewrite-db=pal_main->pal_test
replicate-do-db=pal_test
expire_logs_days = 5
一切正常,但其中包含数据名称的查询有错误
INSERT INTO `pal_main`.`api_log` (`ID`, ...) VALUES (NULL, ...)'
结果:
Last_SQL_Error:键“ PRIMARY”上的错误“重复条目3”
查询。默认数据库:“ pal_test”。查询:“ INSERT INTO”
'pal_main'。'api_log'('ID',...)VALUES(NULL,...)'
查询时:
INSERT INTO `api_log` (`ID`, ...) VALUES (NULL, ...)'
奴隶没有问题
看起来它没有替换查询中的数据库名称并尝试在master中插入时出错
最佳答案
如果binlog-do-db
设置为binlog_format
,则STATEMENT
仅在当前数据库为指定数据库时复制语句。设置为MIXED
时,可能会或可能不会出现相同的问题。
如果先USE pal_main;
,则查询将复制。否则,事实并非如此。
对于您正在执行的操作,您需要binlog_format=ROW
以获得一致的行为。当MySQL决定是否写入Binlog时,这应该消除检查当前数据库的需要。
您正在使用精细的配置进行操作。
关于mysql - 不在同一服务器上的复制查询中重命名数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32570871/