我确信类似的工作流程很常见,但在我的搜索中,我没有找到任何记录在案的示例。
目标:
- 我想在 git 中管理所有 mysql (v5.1+) 数据库定义,以便我拥有源代码控制的所有好处。
- 我想通过编辑脚本和运行脚本来定义对数据库的更改,以便我可以在我选择的编辑器 (vim) 中编辑数据库定义,而不是 mysql shell 或 gui 应用程序。
旁白:我目前使用 mysql shell,但想使用 vim 来维护 shell 中变得笨拙的例程和事件。
计划:
我将使用“--no-data”选项进行初始转储以获取我的初始脚本,但从那时起,我希望我的工作流程是:编辑脚本 -> 提交 -> 运行脚本,而不是:对数据库执行更改 - > 转储 ddl -> 提交。
注意事项:
如果我使用以下内容转储数据库:
mysqldump -u [user] -p [password] --no-data --routines > ddl.sql
这包括:
DROP TABLE IF EXISTS `[table]`; CREATE TABLE `[table]` ([table definition])
显然,如果我运行脚本,这将破坏并重新创建表。如果表存在,我想做的是用定义更改更新表,否则用定义创建表。我宁愿在一个 [table]([table dfinition]) 块中定义表,即重复使用,而不是必须维护多个重复块。
我将如何更改初始转储语法或脚本,以便我可以使用相同的脚本来更新数据库,并在另一个环境中重新创建数据库定义(没有数据)?