什么是最好的方式来挽救我的MySQL数据模型和自动应用改变我的发展数据库服务器因为它们是(或者至少每晚)?

例如,今天我的工作我的项目,并创建这个表格在我的数据库,并保存所作的发言SQL文件部署到生产后:

create table dog (
  uid int,
  name varchar(50)
);

而明天,我决定我想要记录的品种每只狗了。所以我改变SQL文件阅读:

create table dog (
  uid int,
  name varchar(50),
  breed varchar(30)
);

这个脚本会工作中产生的第一个版本,但是它不会帮我更新我的数据库,因为发展 ERROR 1050 (42S01): Table 'dog' already exists.此外,它不会的工作产生如果这个变化是制作后的第一个版本。所以我真的需要 ALTER 这表现在。

所以现在我有两个问题:

  1. 这是我应该如何能救我 数据模型(一堆创建 发言SQL文件),
  2. 如何 我应该可以申请变更喜欢 这到我的数据库?

我的目标是释放更改的准确和持续融合。我用一个工具,称为DDLSYNC发现和应用差别在一个Oracle数据库,但是我不知道类似的工具存在MySQL.

有帮助吗?

解决方案

在工作中,我们开发了一个小小的脚本来管理我们的数据库版本。每一个变化的任何表或集的数据获取它自己的SQL文件。

本文件是按顺序编号。我们跟踪哪些更新的文件已经运行通过存储信息的数据库。脚本中插入一行与该文件时文件是关于被执行,并更新行的完成时间戳当执行完成。这是包裹在内部事务。(值得注意的言的命令在MySQL不能出现在交易。任何试图执行言,在一个交易会导致一个隐含的承诺。)

因为SQL文件的一部分,我们的源代码存储库,我们可以进行更新脚本部分的正常部署的过程。这使得保持数据库和编码同步易如反掌。老实说,最难的部分是确保另一个开发并没有抓住了下来的数量在一个有待提交。

我们把这一更新的系统与一个(任择)夜间擦拭我们开发的数据库,取代内容与最后一个晚上的活动的系统的备份。备份后,恢复、更新得到运行,与任何未决的更新文件得到运行中的过程。

恢复发生在这样一种方式,仅仅表是在现场数据库得到复盖。任何更新,增加了一个表,因此也必须负责只加入,如果它不存在。 DROP TABLE IF EXISTS 是很方便的。不幸的是并不是所有的数据库支持,所以更新系统还允许为执行编写的脚本中,我们选择的语言,而不只是SQL。

所有这一切都在约150行代码。它是那么容易,因为阅读的一个目录,进行比较的内容表,以及执行任何尚未执行,在确定顺序。

其他提示

有的标准工具,为此在许多框架:轨道已有一些所谓的 迁移, 东西是很容易地复制在PHP或任何类似的语言。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top