只有当我通过USE数据库选择数据库时,mysql复制才有效

时间:2013-11-14 22:28:18

标签: mysql replication

我有mysql主从复制。

当我使用以下更新时,它不会改变奴隶:

UPDATE database.table SET key = 'value' WHERE ID = 1;

但是当使用以下查询时,slave正常工作并更新数据库:

USE database;
UPDATE table SET key = 'value' WHERE ID = 1;

造成问题的原因是什么?

2 个答案:

答案 0 :(得分:1)

这可能是一个MySQL错误,包含语句复制和replicate-ignore-db / replicate-do-db,这会导致它忽略错误的语句。

切换到基于行的复制格式应解决此问题(以及其他几个......)。

您还可以通过在配置中使用ignore / do-table而不是db来“修复”它。构造

答案 1 :(得分:0)

你是对的。更多内容是手动(http://dev.mysql.com/doc/refman/5.1/en/replication-options-binary-log.html):

基于语句的日志记录。只有那些语句被写入二进制日志,其中默认数据库(即USE选择的数据库)是db_name。要指定多个数据库,请多次使用此选项,每个数据库使用一次;但是,这样做不会导致跨数据库语句,例如UPDATE some_db.some_table SET foo ='bar'在选择其他数据库(或没有数据库)时被记录。

警告 要指定多个数据库,必须使用此选项的多个实例。由于数据库名称可以包含逗号,因此如果您提供以逗号分隔的列表,则该列表将被视为单个数据库的名称。

使用基于语句的日志记录时无法正常工作的示例:如果使用--binlog-do-db = sales启动服务器并发出以下语句,则不会记录UPDATE语句:

USE prices;
UPDATE sales.january SET amount=amount+1000;