数据库迁移

    目录

    长期以来,数据库迁移一直是个麻烦事。当我们部署代码到服务器上时,希望可以轻松简单地升级我们的表结构。可能会有人用 Navicat 的结构同步来升级,这个确实好用,但有商业风险。

    常见的建表方式有:使用图形化工具建表、使用 PHP 代码定义表结构、手写 SQL 建表等。

    imi 的数据库迁移依赖模型功能,支持:使用图形化工具、手写 SQL 建表,只要你最终生成了模型,就可以使用数据库迁移功能。

    当你使用 imi 模型生成工具生成模型时,会把创建表的 SQL 语句定义在 @DDL 注解中。使用数据库迁移工具,可以自动比较模型定义与数据库服务器上的表(视图)结构差异,并且生成升级语句,升级语句不会造成表数据的丢失。

    正在测试阶段,使用时请先确认 SQL 无误后再执行,本项目不对删库删数据负责。

    项目地址:https://github.com/imiphp/imi-migration

    版权信息

    imi-migration 依赖 phpmyadmin/sql-parser,所以开源协议受到污染,必须是 GPL-2.0,所有基于本项目的代码都要开源。

    建议仅将此组件作为独立工具安装使用,不要在项目中调用此项目中的任意代码,这样就不受开源协议污染了!

    常用的 Linux 和 MySQL 都是 GPL 开源协议,只要使用得当是不会有法律风险的。

    安装

    composer require imiphp/imi-migration:~2.1.0

    使用说明

    模型同步到表结构

    同步表结构

    将数据库中的数据表结构升级为模型中定义的结构。

    vendor/bin/imi-swoole migration/patch -f

    生成同步结构 SQL 语句

    输出到命令行:

    vendor/bin/imi-swoole migration/patch

    保存到文件:

    vendor/bin/imi-swoole migration/patch -f "文件名"

    数据库迁移功能

    配置

    @app.beans:

    [
        \Imi\Migration\Service\MigrationService::class => [
            'handler' => \Imi\Migration\Handler\FileMigrationHandler::class, // 迁移处理器
            'onGenerateModel' => true, // 是否在生成模型时自动生成迁移文件
        ],
    ]
    上述配置是默认配置,不配置时自动启用。

    目录

    .migration 是存放数据库迁移文件和版本信息的目录,请勿将 .migration/version 提交到版本控制系统。

    执行数据库迁移

    执行前询问:

    vendor/bin/imi-swoole migration/migrate

    强制执行:

    vendor/bin/imi-swoole migration/migrate -f
    请谨慎操作

    执行数据库回滚

    执行前询问:

    vendor/bin/imi-swoole migration/rollback

    强制执行:

    vendor/bin/imi-swoole migration/rollback -f
    请谨慎操作

    通用参数

    指定连接池

    vendor/bin/imi-swoole migration/命令 --poolName "连接池名"
    不指定时使用默认连接池

    指定连接参数

    vendor/bin/imi-swoole migration/命令 --driver "PdoMysqlDriver" --options "host=127.0.0.1&port=3306&username=root&password=root"