Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何将一个表模式转换为另一个保留数据的表模式_Mysql_Deployment_Migration_Schema - Fatal编程技术网

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

Mysql 如何将一个表模式转换为另一个保留数据的表模式,mysql,deployment,migration,schema,Mysql,Deployment,Migration,Schema,我有一个为几个客户的机器安装的web应用程序。在更新应用程序时,我需要将表架构的最新版本传播到生产服务器 有很多迁移工具,但大多数都需要付出很多努力,或者比我需要的更复杂。我需要一个如下所述的简单解决方案来简化升级阶段 我需要一个工具来接收开发和生产机器的表模式(由mysqldump--no create info)并生成在生产服务器上运行所需的alter table查询 +------------------------+

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

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

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

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

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

在开始这项工作之前,还要确保备份live DB


如果您想在将来使其更加自动化,我建议您使用Liquibase()之类的工具来控制数据库的版本,并使用Jenkins CI()之类的工具来处理迁移。

听起来您正在寻找一种类似于Ubuntu包(libmysql diff perl)的工具

类似的工具是MySQL实用程序的一部分。但是,它只是比较给定的对象,因此不能同时比较数据库中的所有对象,并且需要知道修改了哪些表。另外,它不能从数据库转储中工作

还列出了其他一些diff工具


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

您可以使用mysql workbench进行此操作。您为它提供模式,并为live数据库提供凭据,它将比较并生成alter语句

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

转到此链接以了解并查找与任何源同步

我们有一个项目,在这个项目中,我们根据Excel工作表生成SQL(每当有什么变化时),并始终将新的SQL提供给mysql workbench,以便通过与productions数据库进行比较来生成alter语句。

我已经尝试过,这非常棒。但是,检测列重命名操作并简单地删除并创建重命名的列还不够智能。所需的程序应要求用户在重命名或删除/创建操作之间进行选择