首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于MySQL行的复制(RBR) -包含意外语句的日志文件

基于MySQL行的复制(RBR) -包含意外语句的日志文件
EN

Stack Overflow用户
提问于 2013-12-24 14:51:49
回答 1查看 507关注 0票数 1

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

我在服务器ONE上的表示:

代码语言:javascript
运行
复制
#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

在服务器上,两个

代码语言:javascript
运行
复制
#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上,如果我执行:

代码语言:javascript
运行
复制
USE db1;
INSERT INTO db1.table1 values (foo,bar);

它在服务器二号上工作。

如果在服务器上执行一个,则执行:

代码语言:javascript
运行
复制
USE db1;
INSERT INTO second_db.table2 values (foo,bar);

插入不是在服务器2上执行的,它很好。

如果在服务器上执行一个,则执行:

代码语言:javascript
运行
复制
CREATE table db1.tableFoo(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);

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

现在,我的问题是:

如果在服务器ONE上执行:

代码语言:javascript
运行
复制
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

谢谢你和圣诞快乐!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20762820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档