如何带数据导出MySQL并迁移至Rails环境PostgreSQL,解决mysqldump异常
问题解决步骤
第一步:修正mysqldump导出错误
你当前执行失败的核心原因是:mysqldump是独立的操作系统命令行工具,不能在MySQL交互式命令行(提示符为mysql>的界面)中执行。
操作流程:
- 先在当前的
mysql>界面执行quit;命令,退出MySQL交互模式回到系统终端/命令提示符界面 - 直接在系统终端执行导出命令:
mysqldump -u root -p -h localhost youspin_development5 > youspin_dump.sql
- 执行后按提示输入MySQL root用户的密码,等待执行完成即可得到完整带数据的MySQL导出文件
youspin_dump.sql
第二步:迁移到Rails配套的PostgreSQL数据库
优先选择Rails生态适配方案,可避免MySQL和PostgreSQL的SQL语法差异问题,操作更稳妥:
方案1:使用Rails原生工具迁移(推荐)
- 保持Rails项目
config/database.yml先连接源MySQL数据库,执行命令:
rails db:schema:dump
执行后会在项目db目录下生成与数据库无关的结构文件schema.rb
- 修改
database.yml配置,切换连接到目标PostgreSQL数据库,提前在PostgreSQL中创建好对应的数据库 - 执行命令导入表结构:
rails db:schema:load
- 安装
yaml_dbgem实现数据跨库迁移,在MySQL连接状态下执行:
rails db:data:dump
导出完成后切换回PostgreSQL连接,执行导入:
rails db:data:load
即可完成全量数据迁移,无需手动修改SQL语法。
方案2:SQL文件直接导入(适合大数据量场景)
- 导出MySQL时添加兼容参数,避免过多语法差异:
mysqldump -u root -p -h localhost --compatible=postgresql --default-character-set=utf8 youspin_development5 > youspin_dump.sql
- 手动修正导出的SQL文件,删除PostgreSQL不支持的MySQL特有语法:比如
ENGINE=InnoDB、AUTO_INCREMENT声明,将tinyint、enum等类型替换为PostgreSQL兼容的bool、varchar等类型 - 在系统终端执行PostgreSQL导入命令:
psql -U 你的PG用户名 -d 目标PG数据库名 -f youspin_dump.sql
按提示输入密码后等待执行完成即可。
内容的提问来源于stack exchange,提问作者santu prajapati
相关产品推荐
相关产品推荐

