MySQL - 如何自动管理多个数据库的更新?
Posted
技术标签:
【中文标题】MySQL - 如何自动管理多个数据库的更新?【英文标题】:MySQL - How do I automatically manage updates on multiple databases? 【发布时间】:2016-07-08 16:04:26 【问题描述】:对于我的 mysql 应用程序,我需要让每个客户端都使用自己的数据库,即数据库不是多租户的。因此,我在多台服务器上拥有相同 MySQL 数据库架构的多个副本。
如何跨多个服务器上的多个数据库自动传播 SQL DDL,例如 ALTER TABLE、CREATE TABLE、DROP TABLE、CREATE INDEX 等?
在接下来的几个月里,我可能在 4 台或更多服务器上拥有超过 300 个数据库。
【问题讨论】:
编写一个脚本,在每台服务器上的每个数据库上运行 SQL 升级。 用有问题的数据库(服务器、数据库名)创建一个表。选择您选择的编程语言(我建议使用 Python、Java、c#)。循环。 【参考方案1】:您可以使用 cronjob 和 mysql 客户端自动化您的工作流程(如果操作始终相同):
mysql -uUSER -pPASSWORD DATABASE < /home/aFileWithSQLStatements.txt
这就是你要找的吗?
【讨论】:
我希望找到一个工具来自动化这个过程。我同意你的观点,我可以按照你提到的或在 php.ini 中编写脚本。我认为 php 会好一些,所以我可以编写错误通知来发布。 使用 php 或 bash 满足您的需求;)【参考方案2】:是时候开始使用迁移库了。迁移将允许您在给定模式上应用或回滚更改(非常适合管理,特别是如果您有相同数据库模式的许多副本)。将其视为数据库架构的版本控制。
单个迁移运行应用给定更改或还原更改所需的 SQL。一些迁移系统只是原始 SQL 文件,其他使用抽象模型来定义迁移,然后自动生成 SQL(通常能够跨不同的数据库技术,如 MySQL、oracle 或 sqlite)。
由于您使用的是 PHP,我喜欢 phinx
https://phinx.org/。您编写迁移然后只需更新当前环境变量就可以针对许多不同的数据库运行它们:
...some migrations written, now apply them...
$> export PHINX_DBHOST=127.0.0.1
$> export PHINX_DBUSER=root
$> export PHINX_DBPASS=password
$> export PHINX_DBNAME=db1
$> phinx migrate
$> export PHINX_DBNAME=db2
$> phinx migrate
$> export PHINX_DBNAME=db3
$> phinx migrate
.... etc....
这将使所有具有相同修改的数据库保持同步。 Phinx 还跟踪针对给定数据库运行了哪些迁移,因此您只需查看迁移表(跟踪迁移运行)即可轻松确定特定数据库的架构的当前状态,而无需检查单个表具体变化。
然后要实现自动化,您可以只编写一个脚本或有一个作业在每个 DB 上应用迁移——它们甚至不需要在同一台机器上!
【讨论】:
以上是关于MySQL - 如何自动管理多个数据库的更新?的主要内容,如果未能解决你的问题,请参考以下文章