侧边栏壁纸
博主头像
Eoser's page! 博主等级

@学习@生活@自己

  • 累计撰写 122 篇文章
  • 累计创建 31 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

数据库搬家-MySQL to Postgres

eoser
2025-11-09 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

起因

All in boom的Nas服务器Docker装了MySQL的服务器,升级后发生开机启动失败问题。

分析后原因应该是磁盘挂载问题,导致MySQL的服务有时候读写失败导入G掉,与飞牛Nas升级系统和MySQL镜像可能都有关。

分析出原因后,没有解决方案,加上被MyAQL坑了几次,决定换数据库。

换数据度流程

中间试过很多方案,都总是失败,最后成功方案如下:

MySQL8.6.4 导出数据 > 修正SQL为兼容5.7 > MySQL5.7导入数据 > 创建pg数据库 > 编辑pgloader配置文件 > 导入数据到postgres > 修改pgsql的schem

MySQL8.6.4导出数据

由于pgloader在2022年就停止维护了,8.0以上的版本似乎不通直接导入pgsql,需先导出数据

注意:只导出个人数据库,系统数据度导出,在5.7版本导入会报错


mysqldump -u root -p --databases 数据库1 数据库2 > user_db.sql

SQL修正,兼容5.7

sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' user_db.sql

sed -i 's/utf8mb4/utf8/g' user_db.sql

MySQL5.7导入数据

先卸载8.6.4,再安装5.7(建议用docker安装,能两个同时存在)

进入5.7的终端


mysql -u root -p < user_db.sql

创建要导入的pg数据库

默认postgres数据库已安装,sql创建数据库


CREATE DATABASE 数据库名;

创建pgloader的文件

创建userdb.load


LOAD DATABASE

     FROM mysql://用户:密码@127.0.0.1:3306/数据库名

     INTO postgresql://用户:密码@172.17.0.1:8117/数据库名

WITH include drop, create tables, create indexes, reset sequences;



cast type varchar when (= precision 0) to text drop typemod,

     type char     when (= precision 0) to text drop typemod;

导入数据到pgsql

pgloader userdb.load

修改导schema为public

ALTER SCHEMA public RENAME TO null;

ALTER SCHEMA mysql中的数据库名 RENAME TO public;

最后

有几个数据库,就从load文件之前创建数据库开始几遍,分别导入

导入成功后,修改相关软件的dburl或数据库即可

postgresql://用户:密码@主机地址:端口/数据库名?currentSchema=public

0

评论区