TimLer Asked: 2022-06-02 00:22:23 +0800 CST2022-06-02 00:22:23 +0800 CST 2022-06-02 00:22:23 +0800 CST MYSQL - 迁移挑战:同名模式 772 我们有 7 台 Linux 服务器(Redhat),每台 linux 服务器都有一个 Mysql DB,里面有 1 个数据库(PROD_1)。(每个项目都有自己的服务器) 我们希望将它们全部迁移到一个数据库服务器(redhat/mariadb)。唯一的问题是所有数据库都具有相同的名称(PROD_1)。除了更改数据库名称之外,还有其他解决方案吗? innodb_file_per_table 在新的 mariadb 上处于活动状态 mysql mariadb 1 个回答 Voted Best Answer Bill Karwin 2022-06-02T06:11:52+08:002022-06-02T06:11:52+08:00 简短的回答是:更改架构名称可能是最好的解决方案。 数据库(或者我更喜欢称之为模式,因为“数据库”根据上下文有多种含义)基本上是表和其他 SQL 标识符的命名空间。 就像任何其他命名空间一样,如果您有两个同名的实体,它们就不能共享一个模式。如果它们在同一个模式中,它们的名称就会发生冲突。如果他们有不同的名字,他们不会冲突。 因此,如果一个 PROD_1 模式的所有表都与另一个 PROD_1 模式的表不同,那么您可以合并它们。但不太可能所有表都不同。 您可以更改表名,以便一个项目中的表具有p1_前缀,而另一个项目中的表具有p2_前缀等。但是您必须更改所有应用程序中的所有查询代码。 您可以在单个服务器上运行多个 MySQL 实例。在某种程度上,这创建了另一个级别的命名空间,因为如果模式位于不同的 MySQL 实例中,它们可以具有相同的名称。 在我的上一份工作中,我们在具有 Docker 网络的 Docker 容器中运行 MySQL 实例,因此每个 Docker pod 都有自己的 IP 地址,就像虚拟服务器一样。 或者,您可以在没有 Docker 的情况下在服务器上运行多个 MySQL 或 MariaDB 实例,但您必须更改每个实例使用的端口、套接字和数据目录。请参阅https://mariadb.com/kb/en/running-multiple-mariadb-server-processes/
简短的回答是:更改架构名称可能是最好的解决方案。
数据库(或者我更喜欢称之为模式,因为“数据库”根据上下文有多种含义)基本上是表和其他 SQL 标识符的命名空间。
就像任何其他命名空间一样,如果您有两个同名的实体,它们就不能共享一个模式。如果它们在同一个模式中,它们的名称就会发生冲突。如果他们有不同的名字,他们不会冲突。
因此,如果一个 PROD_1 模式的所有表都与另一个 PROD_1 模式的表不同,那么您可以合并它们。但不太可能所有表都不同。
您可以更改表名,以便一个项目中的表具有
p1_
前缀,而另一个项目中的表具有p2_
前缀等。但是您必须更改所有应用程序中的所有查询代码。您可以在单个服务器上运行多个 MySQL 实例。在某种程度上,这创建了另一个级别的命名空间,因为如果模式位于不同的 MySQL 实例中,它们可以具有相同的名称。
在我的上一份工作中,我们在具有 Docker 网络的 Docker 容器中运行 MySQL 实例,因此每个 Docker pod 都有自己的 IP 地址,就像虚拟服务器一样。
或者,您可以在没有 Docker 的情况下在服务器上运行多个 MySQL 或 MariaDB 实例,但您必须更改每个实例使用的端口、套接字和数据目录。请参阅https://mariadb.com/kb/en/running-multiple-mariadb-server-processes/