🗄️ 插件数据库安装
ThinkAdmin 提供完善的插件数据库管理机制,基于 Phinx 脚本实现数据库的版本控制和自动化管理。
🚀 主要功能
- 版本控制: 基于 Phinx 的数据库版本控制
- 自动迁移: 自动执行数据库结构变更
- 多数据库支持: 支持 Sqlite、MySQL、SQL Server
- 规范管理: 统一的数据库脚本管理规范
- 插件集成: 与 ThinkPHP 插件机制无缝对接
- 开发简化: 简化数据库迁移过程
📋 支持的数据库
主要支持
- Sqlite: 轻量级数据库,适合开发和测试
- MySQL: 主流关系型数据库
- SQL Server: 企业级数据库
扩展支持
- 其他数据库: 支持其他数据库类型
- 驱动配置: 需要自行安装相应驱动
- 配置优化: 支持自定义数据库配置
⚙️ 技术架构
基于 Phinx
- 轻量级: 轻量级的 PHP 数据库迁移工具
- 版本控制: 支持数据库结构的版本控制
- 自动化: 确保数据库升级过程的自动化
ThinkPHP 集成
- 组件: 基于
topthink/think-migration
组件 - 无缝对接: 与 ThinkPHP 插件机制无缝对接
- 完整解决方案: 提供完整的数据库迁移解决方案
🎯 管理目标
简化操作
- 减少手动操作: 减少手动修改数据库结构的繁琐操作
- 自动化管理: 实现数据库迁移的自动化管理
- 开发效率: 提高插件开发效率
版本控制
- 结构一致性: 确保每次插件升级时数据库结构的一致性
- 版本跟踪: 完整的数据库版本跟踪机制
- 回滚支持: 支持数据库结构的回滚操作
兼容性
- 多环境支持: 支持不同数据库环境
- 可移植性: 增强数据库的兼容性和可移植性
- 灵活配置: 支持灵活的数据库配置
关于数据库脚本
为了确保数据库脚本文件管理的规范性和准确性,对数据库脚本的命名规则、结构以及执行机制进行了进一步的优化。
管理规范明确规定了数据库脚本文件的命名规则。每个脚本文件都由版本号和脚本名称两部分组成,确保每个脚本文件具有唯一的标识。版本号采用8位年月日加6位数字的组合形式,确保版本号的唯一性和可排序性。脚本名称则取容易区别其功能的组合单词,以便于理解和维护。
每个脚本文件都是一个继承自 think\migration\Migrator
的子类,主要实现其中的 change
方法。change
方法是脚本的核心部分,包含了数据库结构的变更逻辑。开发者可以根据需要自定义该方法,以实现各种复杂的数据库迁移操作。同时也提供了更多高级用法的文档和示例,供开发者自行研究和使用。
脚本的安装信息会记录在数据表 migrations
中,以便于跟踪和管理脚本的执行情况。如果需要清理并重复执行脚本,开发者只需删除该表中的数据即可。这种机制保证了脚本的重复执行不会出现问题,同时也方便了开发者进行数据库结构的调整和测试。
通过一个具体的案例来解析命名规则的实际应用。例如,文件名 20221013045829_install_wechat.php
对应的版本号是 20221013045829
,脚本名称为 install_wechat
。根据命名规则,该脚本内的类名应为 InstallWechat
,类名首字母大写,与脚本名称保持一致,符合PHP的命名规范。
生成数据库脚本
目前在核心组件 ThinkLibrary
内集成了 php think xadmin:package
指令,可以将现有 MySQL
数据库打包为数据库脚本,打包好的文件存入在 database/migrations
目录。 打包好后的文件可能还需要后期修改,注意不能出现版本号重复和类名重复,如果出现重复需要将重复的历史数据删除或者修改文件名称。
数据库脚本里面需要做好执行前置检查逻辑,要保证同一个脚本可以重复多次运行,不会导致系统出现问题,系统不能保证同一个脚本只会执行一次,有可能是人为原因。
系统也可以通过这个指令进行数据库备份,支持数据结构与指定数据表内容备份,数据库备份配置文件见项目的 config/phinx.php
文件,主要有三个参数,描述如下:
- 参数
backup
数组,表示要备份内容的数据表名,不填写就是不备份内容; - 参数
tables
数组,表示要备份结构的数据表名,不填写就是备份全部表; - 参数
ignore
数组,表示要忽略备份结构的数据表名,不填写就是备份全部表;
经验教训: 以往我们做过很多的项目,经常忘记将数据库打包备份落地到项目仓库,项目交付经过一段时间停止运维后,线上数据库和本地开发数据库可能都已经丢失,只剩下仓库里面的项目代码,此时这个项目就失去了重复利用的价值,没有数据库项目是跑不起来的,因此我们开发项目的时候需要经常备份数据库结构并与项目保存到一起。
备份所有数据: 可以通过 php think xadmin:package --all
备份所有数据 ( 数据库表结构和数据记录 ),为了维持项目不无限增大,备份记录只保存一份。将此备份脚本上传到对应项目,执行 php think migrate:run
即可完成数据恢复 ( 只有空数据库才会执行恢复 )。
封装插件数据库
将上面生成的数据库脚本文件复制到插件目录,建议不要与源码 src
放到一个目录,防止 Composer
的 autoload
扫描到而导致加载规则污染。 安装应用插件时通过 插件安装器 将应用插件的数据库脚本复制到 database/migrations
目录,执行 php think migrate:run
完成数据库安装与更新。