【问题标题】:How to detect table and stored procedure changes between two databases?如何检测两个数据库之间的表和存储过程更改?
【发布时间】:2012-09-07 17:06:55
【问题描述】:

我有两个数据库,一个用于我的开发系统,另一个用于生产系统。

是否可以检测到两个系统之间的结构变化? (无数据,只检测结构变化)

目前我更新了一个文本文件,其中包含我对表存储过程的所有结构更改。我想自动执行此操作,例如在部署 shell 脚本中。

以下是解决此问题的尝试。问题是我没有得到可以执行的完整 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

【问题讨论】:

    标签: mysql stored-procedures deployment table-structure


    【解决方案1】:

    我相信您可以使用一些文本或 GUI 比较工具来解决大多数问题。但是,每次格式更改或有人不遵循您的标准时,一切似乎都发生了变化。在某个地方,您发现自己正在修复奇怪的错误,例如计数空格等。

    我的意思是,根据我的经验,这并不完全是最好的方法。多年来,我已经看到了一些关于如何解决这个更新问题的不同尝试。

    • Visual Studio 对此有一个角度,它创建了一个数据库项目,该项目将所有更改保存在某种版本日志中。不完全确定具体情况。只需按下 Sync 和 tada!如果您问我,它可以工作,但非常全面且缓慢。

    处理此 IMO 的最简单方法是将所有结构更改放入版本日志/表中;可以这么说。

    假设您的基本数据库需要一个新表。您将进入您的编辑器并添加它(使用 GUI 或代码),按保存并完成。

    改为按提取 SQL;不要按保存。

    我现在的建议是这样的:

    您构建了一个带有大输入框和提交按钮的小型内部 Web 界面。点击提交按钮将从输入框中针对您的本地开发数据库执行任何 SQL 并将结果返回给您。

    如果数据库返回成功,则将 SQL 字符串添加到您的 changeLogSQLVersionThingyTable 中,其中至少包含三列:

    1) 自动递增版本(整数) 2)sql(文本) 3)时间戳(timedate) 4) 开发者 ID ??

    当您对数据库进行更改(例如添加之前的表)时,请改用此工具。

    您现在对数据库所做的所有更改都在一个不错的版本列表中。要更新数据库,您只需执行 changeLogSQLVersionThingyTable 中的每一行,从该特定数据库上次更新到的版本开始。

    通过一些努力,您还可以将数据库重建到更早的位置;只需创建一个新数据库并将所有行一直运行到您想要的版本点。

    【讨论】:

      【解决方案2】:

      您可以使用SQLyog 等 MySQL GUI 工具轻松完成。 SQlyog 的 Schema Synchronization 向导能够满足您的需求,即检查结构的变化并同步它们。请参阅随附的屏幕截图。

      【讨论】:

        【解决方案3】:

        您正在尝试制定一个技术解决方案,而实际上该过程被破坏了。谁在没有安排完全相同的 sql 应用于暂存、QA 和开发的情况下对生产进行了原始更改?

        也就是说,如果您有一个“正常”大小的数据库并且这些更改“很少”发生,我会使用 diff 方法来确定是否已进行更改。手动编写 SQL 脚本来影响更改并不难。不过,我还是会骚扰做出改变的人。

        请注意,diff 具有忽略空格/空白行更改的选项。

        完成后,将新架构签入您的源代码存储库。总有一天会派上用场的。

        【讨论】:

          猜你喜欢
          • 2018-06-15
          • 2012-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多