仅 mysqldump 模式,模式更新不丢失

2024-04-13

我正在考虑在提交更改之前使用 git pre-commit hook 导出 MySQL 数据库模式,以便其他开发人员可以使用 git 存储库中的 SQL 脚本更新自己的数据库。

默认情况下,mysqldump(我正在使用 --no-data)会在重建现有表之前删除它们,这不是我想要的。我想知道是否有人知道一种方法来执行 mysqldump 或类似的方法来使用 SQL 描述数据库模式来更新表(如果存在)而不是删除并重建。我意识到这可能是一个渺茫的机会,但如果有人能指出我正确的方向,那就太好了。


MySQL 如何知道要更新什么?它无法知道其他人的数据库将处于什么状态,因此它无法知道要应用哪些更新。此外,更新经常需要的不仅仅是更改架构;还需要更改架构。他们可能需要更改已存在的数据,或者可能需要将数据从旧模式移动到新模式。你永远不会得到能够自动检测所有这些的东西。

正确的解决方案是编写迁移。每次更改数据库时,您不必自己更改开发副本的架构,而是编写一个脚本来从以前的架构更新到新的架构(通常是一个用于降级回以前的架构的脚本,因此您可以执行以下操作):如果您需要回滚更新)。该脚本可以执行您需要的任何操作,例如更改架构、移动数据等。

大多数现代网络框架,例如红宝石 on Rails http://guides.rubyonrails.org/migrations.html,支持迁移,以便更轻松地跟踪您已运行的迁移。如果您没有使用支持迁移的框架,那么编写自己的脚本来应用迁移也不会太难。只需对每个迁移进行编号,或在其中添加日期,并在数据库中保留一个表,仅存储您所在架构的当前版本。当您运行迁移脚本时,如果有任何比当前版本更新的迁移,请按顺序应用这些脚本,然后更新数据库中表明您所在版本的数字。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅 mysqldump 模式,模式更新不丢失 的相关文章

随机推荐