Phinx 数据库迁移工具最佳实践

在开发项目过程中,需要修改数据库表结构时,通常是在本地先执行,代码部署上线后再在服务器上进行执行,这种做法一来容易遗漏(漏语句或漏执行),二来直接在生产环境手动执行 SQL 语句风险太大,故需要制定些策略来。

在之前任职的公司中团队采取的方案是,每张表结构语句都用文件的形式保存在项目中,一旦该表结构发生变动,就在该文件中记录相关语句,并写上注释、作者、版本号,在发版时通过脚本提取此次版本需要执行的语句批量进行执行。我一般是先在 gui 工具中修改表结构,然后导出生成的语句到文件中(尽量不手写 SQL,避免一些低级错误),但此方法仍然效率低,在思如泉涌编码时,很容易忘记将需要执行的 SQL 语句保存到文件中,以至于发生上线时漏执行 SQL 的情况

后来无意间了解到 phinx 工具,可以很好的解决这个问题,但是 phinx 工具需要手动编辑迁移文件,并且迁移文件并不是原生 SQL 语句,而是 phinx 的范式,所以又找到了 phinx-migrations-generator 工具,该工具可以基于当前表结构生成 phinx 迁移文件,搭配使用,效率原地起飞。 现在基本上我的每个项目都离不开这两个工具,本文简单介绍一下使用方法,并作下笔记,以供日后参考

需求:当前我们有一个项目在本地开发完成,现在需要部署到服务器中且需要很方便的解决后续的开发中表结构变动的问题

迁移老项目

安装 phinx

composer require robmorgan/phinx // 安装 phinx

安装 phinx-migrations-generator

composer require odan/phinx-migrations-generator --dev // 安装 phinx-migrations-generator

初始化 phinx

vendor/bin/phinx init

执行后会在根目录生成 phinx.PHP 文件,手动编辑配置文件

截图

执行 phinx-migrations-generator 工具命令

vendor/bin/phinx-migrations generate

首次执行时会在迁移文件目录中生成 schema.PHP 文件,里面包含了当前数据库中所有的表结构,并同时生成一个 phinx 迁移脚本

截图

此时将代码上传至服务器中,并执行

vendor/bin/phinx migrate -e production

便可将 development 中的所有表结构初始化到 production 环境
后续如果修改了 development 中的表结构,再次执行

vendor/bin/phinx-migrations generate

phinx-migrations-generator 工具会自动根据将当前环境的表结构与 schema.PHP 中的表结构进行对比,并生成一个新的迁移文件,新的迁移文件只包含你修改的表结构语句,不再是全部表结构初始化的语句。再将代码传到服务器,执行

vendor/bin/phinx migrate -e production

便会将 production 环境中的表结构也做同样的修改

至此,便完成了整个执行过程

注:本文只是根据自己的使用习惯做的记录,phinx 还有其他相关功能并未介绍,可参考下方链接了解更多

参考资料:
https://github.com/cakephp/phinx

https://github.com/odan/phinx-migrations-generator

phinx 其他使用命令

原文地址:Phinx 数据库迁移工具最佳实践

121 1 1
1个评论

vs7717

就是逆向生成数据库迁移文件,之前laravel 有,我昨天还在想webmn 有没有可以用的插件

  • 就差一个程序员 7天前

    对的,就是这个意思,我没用过 laravel 的,原理都是一样的,有了这种工具,心智负担减少了很多

就差一个程序员

440
积分
0
获赞数
0
粉丝数
2022-08-28 加入
🔝