如何将表模式转换为另一个保存数据的模式

时间:2015-01-10 10:09:35

标签: mysql deployment migration schema

我有一个为多个客户的机器安装的Web应用程序。在更新应用程序时,我需要将表格架构的最新版本传播到生产服务器。

有很多迁移工具,但大多数都需要付出很多努力,或者比我需要的更复杂。我需要一个简单的解决方案,如下所述,以简化升级阶段。

我需要一个工具来接收开发和生产机器的表格模式(由mysqldump --no-create-info生成),并生成在生产服务器上运行所需的alter table查询。

+------------------------+                                             
|                        +--------------+                              
|Development Machine     |              |                              
|create tables statements|     +--------v-------+                      
+------------------------+     |                |     +----------------+
                               | Automation Tool+----->Alter Statements|
                               |                |     +----------------+
                               +---------^------+                      
+------------------------+               |                             
|Production Machine      |               |                             
|create table statements +---------------+                             
+------------------------+                                             

4 个答案:

答案 0 :(得分:1)

我的方法是使用您首选的mysql访问方法(命令行,phpmyadmin,SequelPro等)手动将更新的列添加到实时用户表中,然后使用服务器端语言编写导入脚本从开发用户表到实时表的任何必要数据。

还要确保在开始这项工作之前备份您的实时数据库。

如果您希望将来更加自动化,我建议您查看Liquibase(http://www.liquibase.org/)之类的内容,以便对数据库进行版本控制,并使用类似Jenkins CI(http://jenkins-ci.org/)的内容处理你的迁移。

答案 1 :(得分:1)

您可以使用mysql workbench。您为其提供架构并提供实时数据库的凭据,它将比较并生成alter语句。

你可以去数据库 - >与任何源同步然后UI是自解释的,以生成alter语句。

转到此链接以感受Database Synchronization并找到与任何来源同步。

我们有一个项目,我们根据Excel工作表生成SQL(无论何时发生变化),并始终将新SQL提供给mysql工作台,以通过与生产数据库进行比较来生成alter语句。

答案 2 :(得分:1)

我尝试了Database Comparer v 6.2 Standalone Utility这真棒。但是,检测列重命名操作并简单地删除并创建重命名的列是不够智能的。所需的程序应该要求用户在重命名或删除/创建操作之间进行选择。

答案 3 :(得分:0)

听起来你正在寻找类似于mysql-schema-diff的工具,它是Ubuntu软件包(libmysql-diff-perl)的一部分。

类似的工具是mysqldiff,它是MySQL Utilities的一部分。但是,它只是比较给定的对象,因此您无法一次比较数据库中的所有对象,并且您需要知道修改了哪些表。此外,它无法通过数据库转储工作。

还列出了一些其他差异工具herehere

无论如何,可能需要进行一些手动调整。例如,检测列重命名并不容易。但是,如果您想保留数据,则需要使用alter change代替alter drop,然后使用alter add,并且自动工具可能无法识别它。