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

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

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


一、准备工作

1. 备份原始数据库
# 备份整个数据库集群(包含用户权限)
pg_dumpall -U postgres -f full_backup.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

参数说明

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

三、恢复数据到容器

1. 复制备份文件到容器
docker cp db_backup.dump postgres-prod:/tmp/
2. 进入容器执行恢复
docker exec -it postgres-prod 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 实现编排管理。


http://www.mrgr.cn/news/96245.html

相关文章:

  • STM32基础教程——定时器
  • PyQt6实例_批量下载pdf工具_exe使用方法
  • QCustomPlot入门
  • 【面试八股】:常见的锁策略
  • 小林coding-9道Java虚拟机面试题
  • 4.6js面向对象
  • 【C++游戏引擎开发】《线性代数》(2):矩阵加减法与SIMD集成
  • 有关pip与conda的介绍
  • Centos7 安装 Nginx
  • Linux的例行性工作
  • 关于跨域问题(本地前端访问服务器端接口跨域出错)
  • MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案
  • 关于服务器只能访问localhost:8111地址,局域网不能访问的问题
  • Redis:概念与常用命令
  • Django 项目打包exe本地运行
  • JAVA接口调用限速器
  • 嵌入式学习第二十八天--顺序栈
  • SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)
  • UE4学习笔记 FPS游戏制作26 UE中的UI
  • ​​解锁 JavaScript DOM:节点操作的核心方法与最佳实践