import{_ as a,o as i,c as l,a2 as n}from"./chunks/framework.B-QBKwc1.js";const o=JSON.parse('{"title":"数据库迁移","description":"除了 SQL 脚本导入,项目还提供了 php artisan db:migrate 命令行工具,支持跨数据库自动迁移(MySQL → PostgreSQL 等),自动迁移索引、外键、字段注释、表注释、","frontmatter":{},"headers":[],"relativePath":"zh/deploy/db-migrate.md","filePath":"zh/deploy/db-migrate.md"}'),e={name:"zh/deploy/db-migrate.md"};function t(p,s,h,k,r,d){return i(),l("div",null,[...s[0]||(s[0]=[n(`

11.3 数据库迁移 ​

CLI 迁移工具

除了 SQL 脚本导入,项目还提供了 php artisan db:migrate 命令行工具,支持跨数据库自动迁移(MySQL → PostgreSQL 等),自动迁移索引、外键、字段注释、表注释、默认值和排序规则(collation),数据迁移基于主键稳定排序并支持事务回滚,详见 7.6 数据库迁移工具。

表结构以 SQL 脚本为准

本项目 database/migrations/ 为空,表结构不通过 Laravel 的 php artisan migrate 管理,而是由 document/ 下的 SQL 脚本导入。

SQL 脚本目录 ​

text
document/
├── mysql/rxthinkcmf.laravel13.elevue.sql        # MySQL 版本(约 216MB)
├── postgresql/rxthinkcmf.laravel13.elevue.sql   # PostgreSQL 版本
├── sqlserver/rxthinkcmf.laravel13.elevue.sql    # SQL Server 版本
├── oracle/rxthinkcmf.laravel13.elevue.sql       # Oracle 版本
└── sqlite/rxthinkcmf.laravel13.elevue.sql       # SQLite 版本

各数据库脚本已针对对应的 SQL 语法做了适配,可直接导入。表前缀统一为 laravel_(与 .env 中 DB_PREFIX 一致)。

各数据库导入命令 ​

MySQL ​

bash
# -----------------------------------------------------------------------------
# MySQL 导入(mysql 命令行工具)
# -----------------------------------------------------------------------------
# -u root -proot → 用户名和密码
# rxthinkcmf...    → 目标数据库名
# < file.sql       → 将 SQL 文件作为输入执行
mysql -u root -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql

PostgreSQL ​

bash
# -----------------------------------------------------------------------------
# PostgreSQL 导入(psql 命令行工具)
# -----------------------------------------------------------------------------
# -U postgres → 连接用户
# -d ...     → 目标数据库
# -f file.sql → 执行 SQL 文件
psql -U postgres -d rxthinkcmf.laravel13.elevue -f document/postgresql/rxthinkcmf.laravel13.elevue.sql

SQL Server ​

bash
# -----------------------------------------------------------------------------
# SQL Server 导入(sqlcmd 命令行工具)
# -----------------------------------------------------------------------------
# -S localhost → 服务器地址
# -U sa       → 用户名(sa 为管理员)
# -P root   → 密码
# -d ...      → 目标数据库
# -i file.sql → 执行 SQL 文件
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.laravel13.elevue -i document/sqlserver/rxthinkcmf.laravel13.elevue.sql

Oracle ​

bash
# -----------------------------------------------------------------------------
# Oracle 导入(sqlplus 命令行工具)
# -----------------------------------------------------------------------------
# root/root@localhost:1521/XE → 用户/密码@主机:端口/服务名
# @file.sql → 执行 SQL 文件
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.laravel13.elevue.sql

SQLite ​

bash
# -----------------------------------------------------------------------------
# SQLite 导入(sqlite3 命令行工具)
# -----------------------------------------------------------------------------
# 数据库文件路径 → SQLite 数据库存储在单个文件中
# < file.sql → 将 SQL 文件作为输入执行
sqlite3 database/database.sqlite < document/sqlite/rxthinkcmf.laravel13.elevue.sql

跨数据库迁移(CLI) ​

在已导入源数据库后,可用 php artisan db:migrate 在不同数据库类型间迁移:

bash
# -----------------------------------------------------------------------------
# 跨数据库迁移(MySQL → PostgreSQL 示例)
# -----------------------------------------------------------------------------
# --src-* / --dst-*  → 源库与目标库连接参数(端口省略时按驱动取默认值)
# --drop-target-first → 迁移前先删除目标库中的同名表
# --batch-size        → 批量插入行数(默认 1000)
# --tables            → 只迁移指定表(逗号分隔),不传则全部
# 目标库不存在时自动创建;迁到 PostgreSQL 需先在 php.ini 启用 extension=pdo_pgsql
php artisan db:migrate \\
  --src-type=mysql --src-host=127.0.0.1 --src-port=3306 \\
  --src-database=rxthinkcmf.laravel13.elevue --src-username=root --src-password=root \\
  --dst-type=pgsql --dst-host=127.0.0.1 --dst-port=5432 \\
  --dst-database=rxthinkcmf.laravel13.elevue --dst-username=postgres --dst-password=123456

注意事项 ​

`,22)])])}const E=a(e,[["render",t]]);export{o as __pageData,E as default};