MySQL - 如何自动管理多个数据库的更新?

时间:2016-07-08 16:04:27

标签: php mysql database

对于我的MySQL应用程序,我需要让每个客户端都在自己的数据库上,即数据库不是多租户。因此,我在多台服务器上拥有相同MySQL数据库架构的许多副本。

如何跨多个服务器上的多个数据库自动传播SQL DDL,例如ALTER TABLE,CREATE TABLE,DROP TABLE,CREATE INDEX等?

我可能会在接下来的几个月内在4台或更多服务器上拥有300多个数据库。

2 个答案:

答案 0 :(得分:0)

您可以使用cronjob和mysql客户端自动化您的工作流程(如果操作总是相同的):

mysql -uUSER -pPASSWORD DATABASE < /home/aFileWithSQLStatements.txt

这是你想要的吗?

答案 1 :(得分:0)

毕业时使用迁移库的时间。迁移将允许您应用或回滚给定模式的更改(特别是对于管理,尤其是如果您有相同数据库模式的许多副本)。可以将其视为数据库模式的版本控制。

单个迁移运行应用给定更改或还原它所需的SQL。一些迁移系统只是原始SQL文件,其他迁移系统使用抽象模型来定义迁移,然后自动生成SQL(通常能够跨MySQL,oracle或sqlite等不同的数据库技术工作)。

由于您使用的是PHP,我喜欢phinx https://phinx.org/。您编写迁移然后只需更新当前环境变量就可以针对许多不同的DB运行它们:

   ...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还会跟踪针对给定数据库运行的迁移,因此您只需查看迁移表(跟踪迁移运行)即可轻松确定,以了解特定数据库的架构的当前状态,而无需检查单个表具体的变化。

然后要自动化,您只需编写一个脚本或者有一个在每个数据库上应用迁移的工作 - 他们甚至不需要在同一台机器上!