对于我的MySQL应用程序,我需要让每个客户端都在自己的数据库上,即数据库不是多租户。因此,我在多台服务器上拥有相同MySQL数据库架构的许多副本。
如何跨多个服务器上的多个数据库自动传播SQL DDL,例如ALTER TABLE,CREATE TABLE,DROP TABLE,CREATE INDEX等?
我可能会在接下来的几个月内在4台或更多服务器上拥有300多个数据库。
答案 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还会跟踪针对给定数据库运行的迁移,因此您只需查看迁移表(跟踪迁移运行)即可轻松确定,以了解特定数据库的架构的当前状态,而无需检查单个表具体的变化。
然后要自动化,您只需编写一个脚本或者有一个在每个数据库上应用迁移的工作 - 他们甚至不需要在同一台机器上!