我有两个数据库,一个用于我的开发系统,另一个是生产系统。
有可能检测到两个系统之间的结构变化吗?(没有数据,只应检测到结构变化)
目前,我更新了一个文本文件,它包含了表和存储过程的所有结构更改。我想自动这样做,例如在deploy脚本中。
以下是解决这个问题的尝试。问题是,我无法获得可以执行的完整sql语句。
mysqldump --skip-comments --no-data --routines --host=sql.test.de --user=root --password=123 bim_stage > /home/deploybackups/stagestructure.sql
mysqldump --skip-comments --no-data --routines --host=sql.test.de --user=root --password=123 bim_dev > /home/deploybackups/devstructure.sql
diff /home/deploybackups/stagestructure.sql /home/deploybackups/devstructure.sql > /home/deploybackups/diffstructure.sql发布于 2012-09-14 14:34:02
我相信您可以用一些文本或GUI比较工具来解决大多数问题。然而,每次格式被改变或者有人没有遵循你的标准时,一切都会改变。在的某个地方,会发现自己修复了奇怪的错误,比如计数空白等。
我要说的是,根据我的经验,这并不是最好的方法。多年来,我在如何解决这个更新问题上看到了一些不同的尝试。
处理此IMO的最简单方法是将所有结构更改转换为一个版本日志/表;可以这么说。
假设您的基本数据库需要一个新的表。您将进入您的编辑器并添加它(使用GUI或代码),按下保存,您就完成了。
相反,请按提取SQL;不要按保存。
我现在的建议是:
你用一个大输入框和一个提交按钮构建了一个小的内部网页界面。单击submit按钮将在本地开发数据库的输入框中执行任何SQL,并返回结果。
如果DB返回成功,则将SQL字符串添加到changeLogSQLVersionThingyTable中,其中至少有三列:
1)自动增量版本(Integer) 2) sql (text) 3)时间戳(timedate) 4)开发人员Id?
当您对DB进行了更改,例如添加以前的表时,请使用此工具。
现在,您可以在一个很好的版本列表中对数据库进行所有更改。要更新数据库,您所要做的就是执行changeLogSQLVersionThingyTable中的每一行,从该特定数据库的任何版本更新到最后一次。
通过一些努力,您还可以将数据库重新构建到更早的位置;只需创建一个新的db,并一直运行所有行,直到您想要的版本点。
发布于 2012-09-14 14:18:45
您可以使用MySQL GUI工具(如SQLyog )来轻松地完成它。SQlyog的Schema同步向导能够执行所需的操作,即检查结构的更改并同步它们。请看附上的截图。

发布于 2012-09-14 16:00:57
当这个过程被打破的时候,你想要做一个技术性的解决方案。谁在没有安排完全相同的sql应用于阶段、QA和开发的情况下对产品进行了最初的更改?
尽管如此,如果您有一个“正常”的-sized数据库,并且“不经常”发生这些更改,我将使用diff方法来确定是否进行了更改。手动创建一个影响更改的SQL脚本并不困难。不过,我还是会骚扰那个做出改变的人。
请注意,diff有忽略空格/空白行更改的选项。
完成之后,将新模式签入源代码存储库。总有一天会派上用场的。
https://stackoverflow.com/questions/12426119
复制相似问题