gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:01:50 25 4
gpt4 key购买 nike

MYSQL 5.1.73
我在同一台服务器上使用复制我的.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: Error 'Duplicate entry '3' for key 'PRIMARY'' on query. Default database: 'pal_test'. Query: 'INSERT INTO 'pal_main'.'api_log' ('ID', ...) VALUES (NULL, ...)'

查询时:

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

从站没有问题

看起来它没有替换查询中的数据库名称,并且尝试插入主数据库时出现错误

最佳答案

如果 binlog_format 设置为 STATEMENT,

binlog-do-db 仅当当前数据库是指定数据库时才会复制语句。设置为 MIXED 时可能会或可能不会出现相同的问题。

如果您首先USE pal_main;,查询将会复制。否则,就不会。

对于您正在做的事情,您需要 binlog_format=ROW 以获得一致的行为。这样当 MySQL 决定是否写入 Binlog 时,就不需要检查当前数据库了。

您正在使用微妙的配置进行操作。

关于mysql - 不在同一服务器上的复制查询中重命名数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com