当前位置: 首页 > news >正文

零基础教程:用 Docker + pgloader 将 MySQL 数据库迁移到 PostgreSQL

在日常开发中,可能会遇到从 MySQL 迁移到 PostgreSQL 的需求。你也许是:

  • 正在准备从传统架构转向云原生;
  • 想使用 PostgreSQL 更强的事务与 JSON 支持;
  • 想统一团队数据库技术栈;
  • 纯粹为了尝试学习不同的数据库系统。

别担心,无需手动写导出脚本,无需配置复杂工具,只需借助 Docker 和一个神奇的工具——pgloader,即可轻松完成。


✅ 教程目标

  • 使用 Docker 启动 MySQL 和 PostgreSQL 容器
  • 利用 pgloader 将数据从 MySQL 自动迁移到 PostgreSQL
  • 整个过程无需安装本地数据库,适合所有平台(Windows/Mac/Linux)

🧾 环境准备

你只需要安装好以下软件:

  • Docker Desktop(可从 官网 下载并安装)
  • 命令行终端:Windows 用户可用 PowerShell,Mac/Linux 使用终端即可
  • 一个耐心的你 🧠

🧰 一、提前拉取所需镜像

为了避免容器启动时网络太慢,可以先手动拉取镜像:

# 打开终端 PowerShell 或 bash# 拉取 MySQL 镜像
docker pull mysql# 拉取 PostgreSQL 镜像
docker pull postgres# 拉取 pgloader 镜像
docker pull dimitri/pgloader:latest

🧱 二、启动数据库容器

启动 MySQL 容器

docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=myrootpassword -e MYSQL_DATABASE=mydb -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword -p 3306:3306 -v $PWD/mysql_data:/var/lib/mysql mysql

📌 参数解释:

  • -e:设置环境变量,如数据库名、用户名、密码等
  • -v:挂载数据目录,持久化存储
  • -p:将容器端口映射到宿主机
  • $PWD:当前目录(Linux/macOS 下可用,Windows 可用 %cd%

启动 PostgreSQL 容器

docker run -d --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -v $PWD/pgdata:/var/lib/postgresql/data postgres

🌐 三、创建容器网络(让它们“看得见彼此”)

Docker 容器默认在隔离网络中,pgloader 需要两个数据库“互通”,所以需要:

# 创建网络
docker network create pgloader-net# 将两个容器加入该网络
docker network connect pgloader-net my-mysql
docker network connect pgloader-net my-postgres

📦 四、使用 pgloader 执行数据迁移

docker run --rm --network=pgloader-net dimitri/pgloader:latest pgloader mysql://myuser:mypassword@my-mysql:3306/mydb postgresql://myuser:mypassword@my-postgres:5432/mydb

📌 这条命令会:

  • 自动连接两个数据库容器
  • 将所有表结构、索引、数据内容一并迁移
  • 无需写任何 SQL 或导出文件!

✅ 五、迁移成功后如何验证?

你可以使用以下方法验证数据是否成功迁移到 PostgreSQL:

方法 1:进入 PostgreSQL 容器查看数据

docker exec -it my-postgres psql -U myuser -d mydb

然后输入 SQL:

\dt -- 查看所有表
SELECT * FROM 表名 LIMIT 10;

方法 2:使用图形工具连接 PostgreSQL

推荐使用以下客户端工具之一:

  • DBeaver
  • pgAdmin
  • DataGrip
  • Navicat Premium

连接 PostgreSQL,输入如下信息:

  • Host:localhost
  • Port:5432
  • Database:mydb
  • Username:myuser
  • Password:mypassword

🧹 六、清理环境(可选)

如果只是测试或临时使用,可以删除这些容器和网络:

docker rm -f my-mysql my-postgres
docker network rm pgloader-net

也可以删除挂载的卷:

rm -rf ./mysql_data ./pgdata

🧠 常见问题与排查

问题解决办法
容器启动失败检查端口是否被占用,或数据卷权限
pgloader 报错 Connection refused检查网络是否连接、数据库是否正常启动
数据库为空确保 MySQL 中原本就有表和数据;否则 pgloader 无内容可迁移
Windows 下 $PWD 报错改用 %cd%,或手动指定绝对路径,如 C:/Users/xxx/mysql_data:/var/lib/mysql

📌 总结

通过本文你学会了:

✅ 使用 Docker 快速搭建 MySQL 和 PostgreSQL 环境
✅ 使用 pgloader 自动化完成数据迁移
✅ 利用图形化工具查看迁移结果
✅ 清理容器环境保持整洁

相关文章:

  • UE5.6新版本—— 动画光照系统重点更新
  • docker 启动一个python环境的项目
  • 详解鸿蒙仓颉开发语言中的日志打印问题
  • linux查看本机服务器的外网IP命令
  • 系分论文《论软件系统安全分析和应用》
  • Web Workers 使用指南
  • 鸿蒙开发:应用上架第二篇,申请发布证书
  • 攻防世界——Web题 fakebook
  • 锐捷网络设备(交换机、路由器、防火墙)常用命令整理
  • 第3周作业-1层隐藏层的神经网络分类二维数据
  • 如何利用 Conda 安装 Pytorch 教程 ?
  • 小土堆pytorch--神经网络-非线性激活线性层及其他层介绍
  • 物联网相关词汇
  • 【JVM】学习笔记
  • API测试框架全解析
  • Java线程池调优与实践经验
  • Tiny C 编译器中,如何实现宏展开和头文件包含的预处理逻辑?
  • maven快速上手
  • iOS 15.4.1 TrollStore(巨魔商店)安装教程详解:第二篇
  • docker exec -it abc bash
  • 化妆品可做的团购网站有哪些/百度一下你就知道官网网址
  • 那个网站适合学生做兼职/东莞谷歌推广公司
  • wordpress 精品主题/厦门百度seo公司
  • 软件开发工程师招聘简章pdf/高手优化网站
  • 免费建手机个人网站/百度做广告怎么收费
  • 网站建设及推广好学习吗/seo网站排名优化工具