所有数据库的 MySQL 主-主复制。如何操作?

所有数据库的 MySQL 主-主复制。如何操作?

背景:我有两个 MySQL 5.1 服务器,它们以主-主行复制 (RBR) 模式设置,如下所示这本优秀的指南。我希望复制所有数据库,并且会定期添加新数据库。

目标:我希望能够通过将数据库添加到其中一台服务器来将新的数据库添加到复制中; 没有必须停止两个从属服务器,更改配置文件,重新启动 MySQL 服务器,然后再次启动从属服务器。

问题: 从我读过的内容来看,我思考binlog-do-db我可以通过简单地省略每个服务器配置中的任何、binlog-ignore-dbreplicate-do-db和设置来实现这一点replicate-ignore-db,但我不确定。MySQL 的文档介绍了如何数据库-桌子-对级别复制选项的评估使我认为可能根本没有办法实现这一点。

我的文件的相关部分/etc/mysql/my.cnf已复制如下。我走对路了吗?我想要的可能实现吗?

主 1

[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

大师 2

[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

答案1

这就是我为两位大师所做的

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin

答案2

关于创建数据库,使用基于行的复制的 CREATE DATABASE 仍然存在错误报告。

该报告已关闭,但该错误在 MySQL 5.1.47 中再次出现
本报告基于 MySQL Cluster(NDB 存储引擎)
该报告基于 replicate-wild-ignore-table 仍在复制。

基于行的复制会导致二进制日志以异常的速度增长,这可能会使网络流量激增,而只需将二进制日志数据传送到从属的中继日志即可。

@Mike 说他让数据库创建工作正常并且复制顺利。我对此毫不怀疑。我有点担心 MySQL(呃 Oracle)在数据库实例化后没有解决基于行的复制的所有问题。

如果您仍希望二进制日志中有基于行的条目,则可能需要切换到 row_format MIXED。在内部,二进制日志格式倾向于在语句和固定格式之间浮动:(参见http://bugs.mysql.com/bug.php?id=40146)。使用混合和避开基于行的 (http://bugs.mysql.com/bug.php?id=39701),但问题仍时常存在。

最后说明

为了您自己的理智,请恢复到基于语句的复制,从而使 CREATE DATABASE(这是一条 SQL 语句)对于针对所创建的数据库的后续 SQL 稳定且一致。事实上,最新的错误报告显示,最好使用基于语句的复制,无论文档中关于数据库级和表级选项的内容如何。

答案3

嗯...您还必须想办法处理/区分自动增加的键和字段。这看起来很有趣。http://mysql-mmm.org/

答案4

cmiiw 我认为您应该能够在 master1 和 master2 上创建数据库而无需更改配置或停止从属,但请确保主 - 主复制正在运行。因为您没有定义需要复制哪个数据库,所以如果您没有在 my.cnf 上定义它,则意味着所有数据库都将被复制。

相关内容