Mysql 复制重写数据库是否有任何实际应用程序?

Mysql 复制重写数据库是否有任何实际应用程序?,mysql,replication,database-replication,Mysql,Replication,Database Replication,我一直在尝试在两台MySQL服务器之间使用master复制,但数据库名称不同,因此遇到了一些障碍。看起来,尽管更新工作正常,但插入却不能 虽然我会说这是一个bug,或者至少是我的设置有问题,但MySQL似乎说这是一个特性(和) 如果像MySQL所说的那样,它只在默认数据库上工作,那么这个设置怎么可能有实际用途呢 我错过什么了吗 参考my.cnf中的相关部分。我一直在通过在phpMyAdmin中进行插入和更新来测试这一点,如果这有什么不同的话 主人 log-bin=mysql-bin binlo

我一直在尝试在两台MySQL服务器之间使用master复制,但数据库名称不同,因此遇到了一些障碍。看起来,尽管更新工作正常,但插入却不能

虽然我会说这是一个bug,或者至少是我的设置有问题,但MySQL似乎说这是一个特性(和)

如果像MySQL所说的那样,它只在默认数据库上工作,那么这个设置怎么可能有实际用途呢

我错过什么了吗


参考my.cnf中的相关部分。我一直在通过在phpMyAdmin中进行插入和更新来测试这一点,如果这有什么不同的话

主人

log-bin=mysql-bin
binlog_do_db=db1
奴隶


我相信他们在文档中提到的是,它不会为您翻译特定的数据库名称,只会翻译由用户设置的数据库。他们的意思是,如果你要执行一些事情,比如:

USE db1;
INSERT INTO table_name (x,y,z) VALUES (1,2,3);
它应该像你期望的那样

但是,如果在查询中显式命名数据库,它将不会自动为您转换该名称。e、 g

INSERT INTO db1.table_name (x,y,z) VALUES (1,2,3); 
很可能phpMyAdmin正在转换查询以指定数据库名称和表名称

编辑:
如果您完全控制整个系统中的查询创作,那么这确实有实际意义,但您需要非常小心,确保在运行查询之前知道查询是什么。某些类型的ORM系统或中介将重写查询,使其显式。我不建议在生产中使用此选项,尤其是当几个团队正在编写与MySQL服务器接口的代码时。

我相信他们在文档中提到的是,它不会为您翻译特定的数据库名称,只会翻译使用中设置的数据库。他们的意思是,如果你要执行一些事情,比如:

USE db1;
INSERT INTO table_name (x,y,z) VALUES (1,2,3);
它应该像你期望的那样

但是,如果在查询中显式命名数据库,它将不会自动为您转换该名称。e、 g

INSERT INTO db1.table_name (x,y,z) VALUES (1,2,3); 
很可能phpMyAdmin正在转换查询以指定数据库名称和表名称

编辑:
如果您完全控制整个系统中的查询创作,那么这确实有实际意义,但您需要非常小心,确保在运行查询之前知道查询是什么。某些类型的ORM系统或中介将重写查询,使其显式。我不建议在生产中使用此选项,特别是当几个团队正在编写与MySQL服务器接口的代码时。

我说这是一个基本问题,他们将其作为针对同一问题的特殊请求。。这发生在二进制日志中

我说这是一个根本性的问题,他们把它作为同一问题的一个特色请求。。这发生在二进制日志中

我的MySQL服务器数量有限,只有两台。一个是生产(PROD),仅用于生产,另一个是开发,兼作灾难恢复(DR)和运行查询

要启用灾难恢复,PROD server将使用复制功能复制到DR,但不重命名,这将导致同一服务器上的两个数据库同名。因此,我所做的是关于生产:

db_application
关于发展,我有两个

db_application (which is used for development)
slave_application (which is used for DR)
我没有在每个语句中使用USE,而是使用连接字符串指定默认数据库,并且所有语句都不包含数据库名称。(即从表中选择*而不是从数据库表中选择*


这允许复制工作,并且在开发服务器上有一个与生产服务器同名的数据库。这符合我的需要,但我很感激其他人可能不认为这种设置切实可行。这更适合完全控制SQL,但对连接字符串的控制有限。

我设置了数量有限的MySQL服务器,两台。一个是生产(PROD),仅用于生产,另一个是开发,兼作灾难恢复(DR)和运行查询

要启用灾难恢复,PROD server将使用复制功能复制到DR,但不重命名,这将导致同一服务器上的两个数据库同名。因此,我所做的是关于生产:

db_application
关于发展,我有两个

db_application (which is used for development)
slave_application (which is used for DR)
我没有在每个语句中使用USE,而是使用连接字符串指定默认数据库,并且所有语句都不包含数据库名称。(即从表中选择*而不是从数据库表中选择*


这允许复制工作,并且在开发服务器上有一个与生产服务器同名的数据库。这符合我的需要,但我很感激其他人可能不认为这种设置切实可行。这更适合于对SQL进行完全控制,但对连接字符串的控制有限。

复制重写db使用与其他复制选项相同。不仅
Replication rewrite db
可以在默认数据库上工作,还可以:
replicate do db、replicate ignore db、binlog do db和binlog ignore db
。参考和

这是现实世界的目的,否则MySQL就不会实现这个选项。而且它只在默认数据库上工作-

这种“只检查默认数据库”行为的主要原因是 仅从声明中很难知道 应该复制(例如,如果使用多个表 删除语句或跨多个表执行操作的多个表更新语句 多个数据库)。只检查默认值也会更快 数据库,而不是所有数据库(如果不需要)

您还应该了解复制规则。