我有mysql主从复制。
当我使用以下更新时,它不会改变奴隶:
UPDATE database.table SET key = 'value' WHERE ID = 1;
但是当使用以下查询时,slave正常工作并更新数据库:
USE database;
UPDATE table SET key = 'value' WHERE ID = 1;
造成问题的原因是什么?
答案 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;