如何使用mysql管理许多相同的基于模式的数据库上的模式更改?

时间:2019-01-23 14:01:11

标签: mysql postgresql database-design multi-database

我正在开发一个网络平台来管理本地区学校的学生注册。为此,我在MySQL(5.7.19)上运行了17个数据库,其中有一个数据库是主数据库,另外16个数据库则代表学校。学校数据库(必须)具有完全相同的架构,每个数据库都包含与关联学校相对应的数据。为了避免延迟,我分开了这种方法,因为每所学校可以注册许多应用程序(平均16k),因此随着时间的推移,请求可能会越来越重。

现在,我遇到了一个严重的问题:当我更改学校数据库的架构时,我必须手动为其他学校的数据库进行维护以保持架构一致性,因为我的sql请求是独立于学校进行的。例如,如果我在database_school5的table_b中添加一个新字段,则必须在所有其余数据库的table_b上手动执行相同的操作。

我该怎么做才能有效地管理这些更改?有自动解决方案吗?是否有针对此问题的适应性DBMS?

有人告诉我PostgreSQL可以通过INHERITANCE轻松实现这一点,但这仅涉及表,除非我没有做一些拙劣的研究。

我希望每次对数据库架构进行更改时,无论是添加表,添加字段,删除字段,添加约束等,这些更改都将自动转移到其他数据库。

谢谢。

1 个答案:

答案 0 :(得分:0)

SELECT ... FROM information_schema.tables
    WHERE schema_name LIKE 'database_school%'
      AND table_name != 'the 17th table'
      AND schema_name != 'database_school5'  -- since they have already done it.

将找到16个名称。您在...中放入的是CONCAT(...),用于构造ALTER TABLE ...语句。

然后您执行以下操作之一:

计划A:手动将这些ALTERs复制/粘贴到mysql命令行工具中以执行它们。

计划B:将所有内容包装在一个存储过程中,该存储过程将遍历SELECT的结果,并准备并执行每一个。