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 实现编排管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风吹落叶花飘荡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值