【问题标题】:How to manage schema changes on many identical schema-based databases with mysql?如何使用 mysql 在许多相同的基于模式的数据库上管理模式更改?
【发布时间】:2019-06-17 03:30:06
【问题描述】:

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

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

我可以做些什么来有效地管理这些更改?有自动解决方案吗?是否有针对此问题的适用 DBMS?

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

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

提前致谢。

【问题讨论】:

  • 可能是这样的? flywaydb.org 该工具有很多替代品。我发现在 git 中管理模式更改是最好的方法,
  • 用git怎么做?
  • 什么意思?问一个更好的问题
  • 你说“我发现在 git 中管理模式更改是最好的方法”,我该如何继续这样做
  • Harrys:您首先使用诸如 flywaydb.org 之类的工具或众多替代工具之一。我没有使用该工具的个人经验,但我使用过其他工具。这些工具要求您编写增量或“迁移”。将这些迁移存储在 git 存储库中。这能回答你的问题吗?

标签: mysql postgresql database-design multi-database


【解决方案1】:
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 的结果并准备+执行每个结果。

【讨论】:

  • 谢谢我试试
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2017-11-19
  • 2011-05-08
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多