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

PostgreSQL数据库迁移到Docker拉取的pg镜像中的

以下是将本地 PostgreSQL 数据库迁移到 Docker 容器中的完整步骤,包含数据备份、容器配置和数据恢复全流程:


一、准备工作

1. 备份原始数据库
# 备份整个数据库集群
pg_dump -h hostname -p port -U user_name -d database_name -f output.sql

# 或备份单个数据库(推荐)
pg_dump -U postgres -d your_database_name -Fc -f db_backup.dump

二、启动 PostgreSQL 容器

1. 创建持久化数据卷
mkdir -p ~/docker/pg_data
2. 启动容器(自动初始化)
# 拉取镜像
docker pull postgres
# 运行容器
docker run -d \
  --name postgres-prod \
  -e POSTGRES_PASSWORD=your_secure_password \
  -e POSTGRES_USER=custom_user \          # 可选(默认使用 postgres)
  -e POSTGRES_DB=your_database_name \     # 可选(默认创建与用户同名数据库)
  -v ~/docker/pg_data:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres

psql -U neondb_owner -d neondb -f /tmp/output.sql
参数说明

  • -v:挂载数据卷实现持久化
  • -p:映射容器端口到宿主机
  • postgres:15:指定 PostgreSQL 版本

example

docker run -d --name pgsql-containter -e POSTGRES_PASSWORD=Sztu@love -e POSTGRES_USER=postgres -e POSTGRES_DB=recruitment-sztu  -v ~/docker/pg_data:/var/lib/postgresql/data   -p 5433:5432   postgres

三、恢复数据到容器

1. 复制备份文件到容器
docker cp db_backup.dump pgsql-containter:/tmp/
2. 进入容器执行恢复

还原整个数据库集群

docker exec -it pgsql-containter bash

# 容器内操作
psql -U postgres -c "CREATE DATABASE your_database_name;"

psql -U user_name -d database_name -f /tmp/output.sql

还原单个数据库(推荐)

docker exec -it pgsql-containter bash

# 容器内操作
psql -U postgres -c "CREATE DATABASE your_database_name;"
pg_restore -U postgres -d your_database_name /tmp/db_backup.dump

恢复完成后删除备份文件

rm /tmp/db_backup.dump
exit

四、验证迁移结果

1. 检查数据库列表
docker exec postgres-prod psql -U postgres -c "\l"
2. 连接测试
psql -h localhost -U postgres -d your_database_name

# 查看表
\dt 

五、高级配置迁移

1. 迁移用户权限
# 如果使用 pg_dumpall 备份了全局对象
docker cp full_backup.sql postgres-prod:/tmp/
docker exec postgres-prod psql -U postgres -f /tmp/full_backup.sql
2. 迁移配置文件
# 复制原 postgresql.conf 到容器
docker cp /etc/postgresql/15/main/postgresql.conf postgres-prod:/var/lib/postgresql/data/

# 重启容器使配置生效
docker restart postgres-prod

六、生产环境优化建议

  1. 网络隔离

    docker network create pg-net
    docker run --network pg-net ...  # 其他容器通过内部网络访问
    
  2. 资源限制

    --memory="4g" --cpus="2"
    
  3. 定期备份

    # 容器内定时任务
    docker exec postgres-prod pg_dump -U postgres -Fc your_db > /path/to/backup_$(date +%Y%m%d).dump
    

常见问题排查

问题1:权限错误
# 查看容器日志
docker logs postgres-prod

# 修复数据目录权限
sudo chown -R 1000:1000 ~/docker/pg_data
问题2:版本不兼容
使用与原数据库相同的主版本(如 PostgreSQL 14 → postgres:14)

完整迁移流程图

pg_dump
本地数据库
生成备份文件
启动 Docker 容器
挂载数据卷
恢复备份到容器
验证数据完整性

通过以上步骤,您已完成数据库到 Docker 的安全迁移。后续可通过 docker-compose.yml 实现编排管理。

相关文章:

  • 3.30 学习总结 Java 常用API+图形化界面
  • Linux系统中修改主机名及设置固定IP地址保姆级教程
  • UE5学习笔记 FPS游戏制作29 更换武器时更换武器的图标
  • 大模型LLMs基于Langchain+FAISS+Ollama/Deepseek/Qwen/OpenAI的RAG检索方法以及优化
  • Java图片加水印 实战demo
  • Linux中逻辑卷的使用、扩容与磁盘配额
  • LeetCode hot 100—排序链表
  • 通俗易懂的讲解SpringBean生命周期
  • 21-bfs-走迷宫(简单模板题)
  • 3132_nodejs_express后端框架
  • Spring中@Value的使用详解,以及和@ConfigurationProperties使用对比
  • 开源项目解读(https://github.com/zjunlp/DeepKE)
  • 补Java基础之重生(14)API(下)
  • 鸿蒙应用权限深度解析:构建安全可信的分布式应用
  • 绿盟春招面试题
  • 输出3行3列矩阵的鞍点
  • 大商创多用户商城系统存在SQL注入漏洞
  • 【蓝桥杯—单片机】通信总线专项 | 真题整理、解析与拓展 (更新ing...)
  • 如何完全卸载宝塔面板?
  • 媒体直播的力量:解锁新时代传播密码,引爆传播效应,媒介盒子分享
  • 开发一个软件的步骤/清理优化大师
  • 做一个购物网站需要多久/360推广开户
  • wordpress设置文章字体颜色/如何做网站seo排名优化
  • 优化产业结构/北京优化seo排名优化
  • 重庆装修贷款利率是多少/廊坊seo快速排名
  • 关于网站建设心得体会/必应搜索国际版