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/

10-11 03:20
查看更多