2

我有mysql主从复制。

当我使用以下更新时,它不会更改从站:

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

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

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

是什么导致问题?

4

2 回答 2

1

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

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

您还可以通过在配置中使用忽略/执行表而不是 db 来“修复”它。配置

于 2013-11-14T23:11:32.457 回答
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;
于 2013-11-15T14:27:11.490 回答