签入版本
This commit is contained in:
@@ -1,21 +1,25 @@
|
||||
# 11.3 数据库迁移
|
||||
|
||||
:::tip CLI 迁移工具
|
||||
除了 SQL 脚本导入,项目还提供了 `php think db:migrate` 命令行工具,支持跨数据库自动迁移(MySQL → PostgreSQL 等),自动迁移索引、外键、字段注释、表注释、默认值和排序规则(collation),数据迁移基于主键稳定排序并支持事务回滚,详见 [7.6 数据库迁移工具](/zh/tools/db-migrate.html)。
|
||||
除了 SQL 脚本导入,项目还提供了 `php artisan db:migrate` 命令行工具,支持跨数据库自动迁移(MySQL → PostgreSQL 等),自动迁移索引、外键、字段注释、表注释、默认值和排序规则(collation),数据迁移基于主键稳定排序并支持事务回滚,详见 [7.6 数据库迁移工具](/zh/tools/db-migrate.html)。
|
||||
:::
|
||||
|
||||
:::info 表结构以 SQL 脚本为准
|
||||
本项目 `database/migrations/` 为空,表结构不通过 Laravel 的 `php artisan migrate` 管理,而是由 `document/` 下的 SQL 脚本导入。
|
||||
:::
|
||||
|
||||
## SQL 脚本目录
|
||||
|
||||
```text
|
||||
document/
|
||||
├── mysql/rxthinkcmf.thinkphp6.elevue.sql # MySQL 版本(约 78 万行)
|
||||
├── postgresql/rxthinkcmf.thinkphp6.elevue.sql # PostgreSQL 版本
|
||||
├── sqlserver/rxthinkcmf.thinkphp6.elevue.sql # SQL Server 版本
|
||||
├── oracle/rxthinkcmf.thinkphp6.elevue.sql # Oracle 版本
|
||||
└── sqlite/rxthinkcmf.thinkphp6.elevue.sql # SQLite 版本
|
||||
├── 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 语法做了适配,可直接导入。
|
||||
各数据库脚本已针对对应的 SQL 语法做了适配,可直接导入。表前缀统一为 `laravel_`(与 `.env` 中 `DB_PREFIX` 一致)。
|
||||
|
||||
## 各数据库导入命令
|
||||
|
||||
@@ -23,12 +27,12 @@ document/
|
||||
|
||||
```bash
|
||||
# -----------------------------------------------------------------------------
|
||||
# MySQL 导入(mysql 命行工具)
|
||||
# MySQL 导入(mysql 命令行工具)
|
||||
# -----------------------------------------------------------------------------
|
||||
# -u root -proot → 用户名和密码
|
||||
# rxthinkcmf... → 目标数据库名
|
||||
# < file.sql → 将 SQL 文件作为输入执行
|
||||
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
|
||||
mysql -u root -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### PostgreSQL
|
||||
@@ -40,7 +44,7 @@ mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thi
|
||||
# -U postgres → 连接用户
|
||||
# -d ... → 目标数据库
|
||||
# -f file.sql → 执行 SQL 文件
|
||||
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcmf.thinkphp6.elevue.sql
|
||||
psql -U postgres -d rxthinkcmf.laravel13.elevue -f document/postgresql/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### SQL Server
|
||||
@@ -54,7 +58,7 @@ psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcm
|
||||
# -P root → 密码
|
||||
# -d ... → 目标数据库
|
||||
# -i file.sql → 执行 SQL 文件
|
||||
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -i document/sqlserver/rxthinkcmf.thinkphp6.elevue.sql
|
||||
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.laravel13.elevue -i document/sqlserver/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### Oracle
|
||||
@@ -65,7 +69,7 @@ sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -i document/sql
|
||||
# -----------------------------------------------------------------------------
|
||||
# root/root@localhost:1521/XE → 用户/密码@主机:端口/服务名
|
||||
# @file.sql → 执行 SQL 文件
|
||||
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp6.elevue.sql
|
||||
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### SQLite
|
||||
@@ -76,11 +80,32 @@ sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp6.elevue
|
||||
# -----------------------------------------------------------------------------
|
||||
# 数据库文件路径 → SQLite 数据库存储在单个文件中
|
||||
# < file.sql → 将 SQL 文件作为输入执行
|
||||
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp6.elevue.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
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 每种数据库的主脚本已做语法适配,无需手动转换
|
||||
- 导入前请先创建数据库并配置好用户权限
|
||||
- 详见 [2.4 数据库初始化](/zh/quickstart/database-init.html)
|
||||
- 脚本体积较大(约 216MB),导入耗时较长,建议在内网或本机执行;可先用 `--tables` 只迁移部分表
|
||||
- 详见 [2.5 数据库初始化](/zh/quickstart/database-init.html)
|
||||
|
||||
Reference in New Issue
Block a user