数据库
首页 > 数据库> > 仅限mysqldump模式,模式更新没有删除

仅限mysqldump模式,模式更新没有删除

作者:互联网

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

默认情况下,mysqldump(我使用–no-data)会在重建之前丢弃现有的表,这不是我所追求的.我想知道是否有人知道一种方法来执行mysqldump或类似的方法来描述带有SQL的db模式来更新表,如果它们存在而不是删除和重建.我意识到这可能是一个长镜头,但如果有人能指出我正确的方向,那将是伟大的.

解决方法:

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

正确的解决方案是编写迁移.每次更改数据库时,不是自己更改开发副本的模式,而是编写一个脚本以从先前的模式更新到新模式(通常是一个脚本,以降级回以前的模式,所以你可以做如果你需要回滚更新).该脚本可以执行更改架构,移动数据等所需的任何操作.

大多数现代Web框架(如Ruby on Rails)都支持迁移,以便更轻松地跟踪已运行的迁移.如果您没有使用支持迁移的框架,那么编写自己的脚本来应用迁移就不会太糟糕了.只需为每次迁移编号,或在其中添加日期,并在数据库中保留一个表,仅存储您所在的模式的当前版本.运行迁移脚本时,如果有任何比当前版本更新的迁移,请按顺序应用这些脚本,然后更新数据库中的数字,说明您所使用的版本.

标签:git,mysql,mysqldump,hook,pre-commit
来源: https://codeday.me/bug/20190630/1339384.html