mysql - replicate-rewrite-db 是否有实际应用?

标签 mysql replication database-replication

我一直在尝试在两个 MySQL 服务器之间进行主-主复制,但数据库名称不同,我遇到了一些绊脚石。看起来虽然 UPDATE 可以按预期正常工作,但 INSERT 却不能。

虽然我会说这是一个错误或至少是我的设置有问题,但 MySQL 似乎说这是一个功能(herehere)。

如果像 MySQL 所说的那样,它仅适用于默认数据库,那么此设置如何在现实世界中发挥实际作用?

我错过了什么吗?


引用my.cnf中的相关部分。我一直在通过在 phpMyAdmin 中进行插入和更新来测试它是否有任何不同。

主人

log-bin=mysql-bin
binlog_do_db=db1

奴隶

replicate-rewrite-db=db1->db2
replicate-wild-do-table=db2.table1

最佳答案

Replication-rewrite-db 用法与其他复制选项相同。不仅 Replication-rewrite-db 可以在默认数据库上运行,还有:replicate-do-db、replicate-ignore-db、binlog-do-db 和 binlog-ignore-db 。引用thisthis .

有实际用途,否则 MySQL 不会实现此选项。它仅适用于默认数据库 because -

The main reason for this “check just the default database” behavior is that it is difficult from the statement alone to know whether it should be replicated (for example, if you are using multiple-table DELETE statements or multiple-table UPDATE statements that act across multiple databases). It is also faster to check only the default database rather than all databases if there is no need.

您还应该了解复制规则。来自 here .

我通过发出 INSERT、DELETE 和 UPDATE 测试了 phpmyadmin,并注意到(通过启用 general_query_log)它发出 INIT DB 'db_name'(为 mysql_select_db() API 调用记录“Init DB”。

例如:

Init DB sakila
1 Query INSERT INTO `sakila`.`actor_info` (`actor_id`, `first_name`, `last_name`, `film_info`) VALUES ('1235', 'abc', 'efg', NULL)

所以最终复制不应该中断,因为 phpmyadmin 通过在每个查询之前执行 USE db 来正确地做到这一点。

关于mysql - replicate-rewrite-db 是否有实际应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843260/

相关文章:

php - 向MYSQL中插入字符串和数组的组合

mysql - Linux 从 Webmin 执行 MySQL 备份到基于时间的路径

PHP 到 MySQL SSL 连接

mysql复制跳过语句。可能吗?

mysql - 在一定时间后完成所有 MySQL 更改

mysql - 使用 --skip-slave-start 启动 mysql

php - 按时执行的自执行脚本

database - 将数据从多个数据库复制到单个数据库

sql-server - 报告数据库订阅服务器上的 SQL Server 2008 R2 分发服务器?

mysql - Drupal 7 MySQL 主/从复制不工作