我有mysql主从复制。
当我使用以下更新时,它不会更改从站:
UPDATE database.table SET key = 'value' WHERE ID = 1;
但是当使用以下查询时,slave 可以正常工作并更新数据库:
USE database;
UPDATE table SET key = 'value' WHERE ID = 1;
是什么导致问题?
我有mysql主从复制。
当我使用以下更新时,它不会更改从站:
UPDATE database.table SET key = 'value' WHERE ID = 1;
但是当使用以下查询时,slave 可以正常工作并更新数据库:
USE database;
UPDATE table SET key = 'value' WHERE ID = 1;
是什么导致问题?
这可能是语句复制和replicate-ignore-db/replicate-do-db 的MySQL 错误,导致它忽略错误的语句。
切换到基于行的复制格式应该可以解决这个问题(以及其他几个......)。
您还可以通过在配置中使用忽略/执行表而不是 db 来“修复”它。配置
你说的对。更多内容在手册中(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;