Skip to content

跨库数据迁移

说明

项目提供 scripts/migrate_db.py 脚本,支持在不同数据库之间迁移数据(如 MySQL → PostgreSQL / SQL Server / SQLite / Oracle)。脚本独立运行,参数显式给出,不依赖 .env

使用场景

场景说明
MySQL → PostgreSQL生产环境切换数据库
MySQL → SQL Server企业环境适配
MySQL → SQLite开发/测试环境轻量化
MySQL → Oracle企业级数据库适配

命令行参数

bash
python scripts/migrate_db.py --help
参数必填说明示例
--source-db源数据库类型mysql
--target-db目标数据库类型postgresql
--source-url源数据库连接 URLmysql+pymysql://root:123456@localhost:3306/db
--target-url目标数据库连接 URLpostgresql://postgres:123456@localhost:5432/db

使用示例

MySQL → PostgreSQL

bash
python scripts/migrate_db.py \
    --source-db mysql \
    --target-db postgresql \
    --source-url "mysql+pymysql://root:123456@localhost:3306/djangoadmin" \
    --target-url "postgresql://postgres:123456@localhost:5432/djangoadmin"

MySQL → SQLite

bash
python scripts/migrate_db.py \
    --source-db mysql \
    --target-db sqlite \
    --source-url "mysql+pymysql://root:123456@localhost:3306/djangoadmin" \
    --target-url "sqlite:///djangoadmin.db"

迁移流程

1. 连接源数据库和目标数据库
2. 读取源数据库所有表结构
3. 在目标数据库创建对应表(Base.metadata.create_all)
4. 逐表读取源数据 → 批量插入目标数据库
5. 输出迁移统计(表数、行数、耗时)

注意事项

迁移前备份

跨库迁移前务必备份目标数据库,避免数据丢失。

  • 迁移脚本会先在目标库创建表结构(如已存在则跳过)
  • 数据迁移采用批量插入,大表迁移可能需要较长时间
  • 不同数据库的字段类型差异由 SQLAlchemy 方言层自动处理
  • 迁移完成后建议在目标库执行 scripts/seed_dict.py 补充字典数据

相关脚本

脚本用途
scripts/migrate_db.py跨库数据迁移
scripts/seed_dict.py字典数据初始化
scripts/init_db.py数据库初始化(建库建表)
scripts/health_check.py健康检查

总结

跨库数据迁移脚本支持 MySQL / PostgreSQL / SQL Server / SQLite / Oracle 之间的数据迁移,参数显式给出,不依赖 .env 配置。迁移前务必备份目标数据库。

小蚂蚁云团队 · 提供技术支持