我有一个为多个客户的机铰链安装的Web应用程序。在更新应用程序时,我需要将最新版本的表架构传播到生产服务器。
有很多迁移工具,但其中大多数需要付出很多努力,或者比我需要的更复杂。我需要一个像下面描述的那样简单的解决方案来简化升级阶段。
我需要一个工具来接收开发和生产机器的表的模式(由mysqldump --no-create-info
生成),并生成在生产服务器上运行所需的更改表查询。
+------------------------+
| +--------------+
|Development Machine | |
|create tables statements| +--------v-------+
+------------------------+ | | +----------------+
| Automation Tool+----->Alter Statements|
| | +----------------+
+---------^------+
+------------------------+ |
|Production Machine | |
|create table statements +---------------+
+------------------------+
我的方法是使用您首选的 mysql 访问方法(命令行、phpmyadmin、SequelPro 等)手动将更新的列添加到实时用户表中,然后用服务器端语言编写导入脚本,以将任何必要的数据从开发用户表移植到实时表。
还要确保在完成这项工作之前备份您的实时数据库。
如果你想在将来使它更加自动化,我建议你看看像Liquibase(http://www.liquibase.org/)这样的东西来控制你的数据库,并使用像Jenkins CI(http://jenkins-ci.org/)这样的东西来处理你的迁移。
你可以使用 mysql workbench 来实现这一点。您为其提供架构并提供实时数据库的凭据,它将比较并生成 alter 语句。
您可以转到数据库 --> 与任何源同步,然后 UI 是不言自明的生成 alter 语句。
转到此链接以了解数据库同步并找到与任何源同步。
我们有一个项目,我们基于 Excel 工作表生成 SQL(每当有变化时),并始终将新的 SQL 提供给 mysql 工作台,通过与生产数据库进行比较来生成 alter 语句。
我尝试过数据库比较器 v 6.2 独立实用程序,这很棒。但是,它不够智能,无法检测列重命名操作并简单地删除并创建重命名的列。所需的程序应要求用户在重命名或删除/创建操作之间进行选择。
听起来你正在寻找一个类似于mysql-schema-diff的工具,它是Ubuntu包(libmysql-diff-perl)的一部分。
一个类似的工具是mysqldiff,它是MySQL实用程序的一部分。但是,它只是比较给定的对象,因此您无法一次比较数据库中的所有对象,并且您需要知道修改了哪些表。另外,它不能从数据库转储工作。
这里和这里列出了一些其他的差异工具。
无论如何,可能需要进行一些手动调整。例如,检测列是否已重命名并不容易。但是,如果要保留数据,则需要使用alter change
而不是alter drop
后跟alter add
,并且自动工具可能无法识别它。