我只为主主复制配置了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);它在服务器二号上工作。
如果在服务器上执行一个,则执行:
USE db1;
INSERT INTO second_db.table2 values (foo,bar);插入不是在服务器2上执行的,它很好。
如果在服务器上执行一个,则执行:
CREATE table db1.tableFoo(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);创建表不是在服务器2上执行的,它很好,因为我选择了基于行的复制,所以我必须手动在服务器2上执行create语句。这就是我想要的。
现在,我的问题是:
如果在服务器ONE上执行:
USE db1;
CREATE table db1.tableFoo(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);创建表是在服务器2上执行的,它是而不是好!通常,对于基于行的复制,创建顺序不会被复制。
最糟糕的是,如果在使用db1之后;如果在另一个数据库中创建一个表,则创建表将在我的服务器2上复制,而我的从属服务器在服务器2上被中止,因为de数据库不存在.
你知不知道?我不想要任何创建/更改/创建用户..。发送到我的复制,即使我使用à使用db1;
我的工作是基于mySQL文档,特别是这个文档:http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html
谢谢你和圣诞快乐!
发布于 2013-12-24 15:02:31
DDL语句总是使用基于语句的复制来记录,不管您是否选择了RBR。因此,在执行CREATE TABLE语句时,默认(当前)数据库非常重要。
来自binlog-do-db:
DDL语句(如CREATE和ALTER )总是记录为语句,而不考虑实际的日志记录格式,因此以下基于语句的--binlog db规则总是适用于确定语句是否被记录。 ...Only将这些语句写入二进制日志,其中默认数据库(即由USE选择的数据库)为db_name。
这表明你所观察到的行为是意料之中的,尽管它有点奇怪。
如果可能的话,我建议您在执行不希望在应用程序中复制的DDL之前,USE一个未复制的DB (例如mysql)。
https://stackoverflow.com/questions/20762820
复制相似问题