【问题标题】:How to transform a table schema to another one keeping data如何将表架构转换为另一个保存数据的架构
【发布时间】:2015-03-31 20:34:57
【问题描述】:

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

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

我需要一个工具来接收开发和生产机器的表架构(由mysqldump --no-create-info 生成)并生成在生产服务器上运行所需的更改表查询。

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

【问题讨论】:

    标签: mysql deployment migration schema


    【解决方案1】:

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

    在你做这项工作之前,请务必备份你的实时数据库。

    如果您想在未来使其更加自动化,我建议您使用 Liquibase (http://www.liquibase.org/) 之类的工具来控制数据库的版本,并使用 Jenkins CI (http://jenkins-ci.org/) 之类的工具来处理您的迁移.

    【讨论】:

      【解决方案2】:

      您可以为此使用 mysql 工作台。您将架构提供给它并提供实时数据库的凭据,它会比较并生成更改语句。

      您可以转到数据库 --> 与任何源同步,然后 UI 可以自我解释以生成更改语句。

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

      我们有一个项目,在该项目中,我们基于 Excel 表生成 SQL(每当发生变化时),并始终将新 SQL 提供给 mysql 工作台,以通过与生产数据库进行比较来生成更改语句。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          一个类似的工具是mysqldiff,它是 MySQL Utilities 的一部分。但是,它只是比较给定的对象,所以你不能一次比较数据库中的所有对象,你需要知道哪些表被修改了。另外,它不能从数据库转储中工作。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-15
            • 1970-01-01
            • 2018-11-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-07
            • 1970-01-01
            相关资源
            最近更新 更多