不在同一服务器上的复制查询中重命名数据库

时间:2015-09-14 17:52:14

标签: mysql database-replication

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:错误'重复录入' 3'关键' PRIMARY''上   查询。默认数据库:' pal_test'。查询:' INSERT INTO   ' pal_main'' api_log' (' ID',...)VALUES(NULL,...)'

查询:

INSERT INTO `api_log` (`ID`, ...) VALUES (NULL, ...)'

奴隶没有问题

它看起来不会在查询中替换数据库名称并在主服务器

中尝试插入时出错

1 个答案:

答案 0 :(得分:0)

如果binlog-do-db设置为binlog_format

STATEMENT将仅在当前数据库是指定数据库时复制语句。设置为MIXED时,可能会也可能不会出现同样的问题。

如果先USE pal_main;,则查询将复制。否则,它没有。

对于您正在做的事情,您需要binlog_format=ROW才能保持一致的行为。当MySQL决定是否写入Binlog时,这应该不需要检查当前数据库。

您使用精巧的配置进行操作。