【问题标题】:MySQL Row-Based Replication (RBR) - Log file containing unexpected statementMySQL 基于行的复制 (RBR) - 包含意外语句的日志文件
【发布时间】:2014-01-12 19:26:30
【问题描述】:

我只是为 MASTER-MASTER 复制配置了 2 个 mySQL 服务器。 我出于某种原因选择了 RBR 复制。

我在服务器 ONE 上的配置:

#replication
server-id=1
binlog_do_db = db1
binlog_ignore_db = db2
log-bin="C:/ProgramData/MySQL/my56"
auto_increment_increment = 2
auto_increment_offset = 1
binlog_format=ROW
replicate_do_db=db1

在服务器上两个

#replication
server-id=2
binlog_do_db = db1
log-bin="C:/ProgramData/MySQL/my56"
auto_increment_increment = 2
auto_increment_offset = 2
binlog_format=ROW
replicate_do_db=db1

这样,复制就可以工作了。

例如,在服务器 ONE 上,如果我执行:

USE db1;
INSERT INTO db1.table1 values (foo,bar);

它在服务器 TWO 上工作。

如果在服务器 ONE 我执行:

USE db1;
INSERT INTO second_db.table2 values (foo,bar);

插入不在服务器上执行TWO,很好。

如果在服务器 ONE 我执行:

CREATE table db1.tableFoo(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

创建表不在服务器TWO上执行,很好,因为我选择了基于行的复制,所以我必须在服务器上手动执行CREATE STATEMENT TWO。这就是我想要的。

现在,我的问题是:

如果在服务器 ONE 我执行:

USE db1;
CREATE table db1.tableFoo(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

CREATE TABLE 在服务器 TWO 上执行,它不是好!通常使用基于行的复制不会复制 CREATE ORDER。

最糟糕的是,如果在 USE db1; 之后如果在另一个数据库中创建一个表,则 CREATE TABLE 会复制到我的服务器 TWO 上,而我的从服务器在服务器 两个 因为 de 数据库不存在...

你有什么想法吗?我不希望任何 CREATE / ALTER / CREATE USER ... 发送到我的复制,即使我使用 à USE db1;

我的工作基于 mySQL 文档,尤其是这个文档:http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html

谢谢你,圣诞快乐!

【问题讨论】:

    标签: mysql database-replication


    【解决方案1】:

    DDL 语句总是使用基于语句的复制记录,无论您是否选择了 RBR。因此,当您执行CREATE TABLE 语句时,默认(当前)数据库很重要

    来自http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#option_mysqld_binlog-do-db

    DDL 语句(例如 CREATE TABLE 和 ALTER TABLE)始终作为语句记录,而不考虑有效的日志记录格式,因此 --binlog-do-db 的以下基于语句的规则始终适用于确定是否语句已记录。

    ...只有那些语句被写入二进制日志,其中默认数据库(即 USE 选择的数据库)为 db_name。

    这表明您观察到的行为是预期的,尽管有点奇怪。

    如果可能,我建议您在执行您不想在应用程序中复制的 DDL 之前USE 一个未复制的数据库(例如 mysql)。

    【讨论】:

    • +1 虽然一点也不奇怪...结合replicate_do_db=db1use db1 这正是预期的行为。 replicate-wild-do-table 可能是比replicate-do-db 更好的选择,尽管除了“复制所有内容”之外的任何其他操作通常都会带来麻烦。
    • 好的,谢谢!我觉得我的英语不是很好,我误解了这句话。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    相关资源
    最近更新 更多