从Docker容器中备份整个PostgreSQL的操作步骤

 更新时间:2024年10月30日 11:59:39   作者:亚林瓜子  
现在需要从Docker容器中备份整个PostgreSQL后,然后,使用备份文件在另外一个pg的docker容器中恢复过来,所以本文给大家介绍了从Docker容器中备份整个PostgreSQL的操作步骤,通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下

问题

现在需要从Docker容器中备份整个PostgreSQL后,然后,使用备份文件在另外一个pg的docker容器中恢复过来。

步骤

备份旧容器中的PG

# 登录到旧的PG容器中
docker exec -it postgres bash
# 备份数据库
pg_dumpall -c -U postgres > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql
# 退出容器
exit
# 退出容器后,复制出备份文件到主机中
docker cp postgres:/dump_2024-10-26_05_58_04.sql dump_2024-10-26_05_58_04.sql

这里主要是用pg_dumpall备份整个pg实例,具体命令解释如下:

  • -c:备份的sql文件中包含DROP语句;
  • -U: 数据库用户名。

创建新的PG容器

准备好备份文件之后,然后,停止老的PG容器,创建新的PG容器。

# 停止老的PG容器
docker stop postgres
# 创建新的PG容器
docker run --name postgres2 -e POSTGRES_PASSWORD=<密码> -p 5432:5432 -d postgres -c max_connections=800

恢复数据

# 复制备份数据文件到新PG容器中
docker cp dump_2024-10-26_05_58_04.sql postgres2:/
# 登录到新PG容器中
docker exec -it postgres2 bash
# 恢复备份数据库
psql -f dump_2024-10-26_05_58_04.sql -U postgres postgres

收尾

新pg容器没问题后,可以删除旧pg容器,然后,更名新pg容器即可。

# 删除旧pg容器
docker rm postgres
# 改名老pg容器
docker rename postgres2 postgres

拓展:定时备份Docker部署的PostgreSQL数据库

注:系统必须已安装docker和docker-compose

一、PostgreSQL备份脚本

1. 备份脚本

# vi /opt/postgresql/conf/backup/pg_backup.sh
#!/bin/bash
# 设置数据库连接参数
DB_HOST="localhost"
DB_PORT="5432"
DB_NAME="PGDB"
DB_USER="root"
DB_PASS="Admin@123"
# 设置备份目录
BACKUP_DIR="/mnt"
# 获取当前时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
# 设置备份文件名
BACKUP_FILE="$BACKUP_DIR/backup_$DB_NAME_$TIMESTAMP.sql"
# 使用 pg_dump 命令备份数据库
pg_dump -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -Fc -b -v -f "$BACKUP_FILE"
# 检查备份是否成功,并导出备份日志
if [ $? -eq 0 ]; then
    echo "$TIMESTAMP Backup completed successfully: $BACKUP_FILE" >> /mnt/pg_backup.log
else
    echo "$TIMESTAMP Backup failed." >> /mnt/pg_backuo.log
fi
# 检查并删除十天前的备份文件  
find "$BACKUP_DIR" -type f -name "$DB_NAME_*.sql" -mtime +10 -exec rm {} \;  
echo "$TIMESTAMP Backup completed and old backups cleaned up." >> /mnt/pg_backup.log

2.添加执行权限

chmod +x  /opt/postgresql/conf/backup/pg_backup.sh

二、 部署PostgreSQL

1. 使用docker-compos部署PG

# vi /opt/postgresql
version: "3"
services:
  postgresql:
    image: postgres:16.3-alpine
    restart: always
    privileged: true
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: Admin@123
      POSTGRES_DB: PGDB
    ports:
      - 5432:5432
    volumes:
      - ./conf/postgres/data:/var/lib/postgresql/data
      - ./conf/backup:/mnt			#备份脚本和备份文件存放目录

2. 启动PostgreSQL

# cd /opt/ postgresql
# docker-compose up -d

三、 计划任务自动备份

1. 设置计划任务

# 每天凌晨一点自动执行数据库备份脚本
# crontab -l
0 1 * * *  docker exec postgresql   /bin/bash -c "/mnt/pg_backup.sh"

总结

到此docker迁移pg还是挺容易的。这里少了一个pg容器应当映射到持久化磁盘中,这点不要学我,以后,有机会再说吧。

到此这篇关于从Docker容器中备份整个PostgreSQL的操作步骤的文章就介绍到这了,更多相关Docker备份PostgreSQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows10 Docker Desktop安装过程

    Windows10 Docker Desktop安装过程

    Docker Desktop是Docker公司推出的一款桌面应用程序,它提供了一个用户友好的界面,方便开发人员在本地环境中使用容器技术,这篇文章主要介绍了Windows10 Docker Desktop安装过程,需要的朋友可以参考下
    2024-01-01
  • Docker镜像下载的常见问题及解决办法

    Docker镜像下载的常见问题及解决办法

    在使用Docker时,用户常遇到下载镜像错误,如TLS握手超时、请求取消等,主要由网络状况、配置问题或DockerHub服务导致,本文就来介绍了一下几种解决方法,感兴趣的可以了解一下
    2024-10-10
  • Windows docker的安装和初使用详细教程

    Windows docker的安装和初使用详细教程

    Docker是开源容器引擎,用于打包应用及依赖,安装需Windows10/11专业版/企业版,启用WSL2和Hyper-V,配置镜像和端口映射,支持本地文件挂载,卸载时关闭DockerDesktop并重启系统,本文给大家介绍Windows docker的安装和初使用,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • 详解如何查看 docker 容器使用的资源

    详解如何查看 docker 容器使用的资源

    本篇文章主要介绍了详解如何查看 docker 容器使用的资源,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • docker network 自定义网络配置与管理指南详细过程

    docker network 自定义网络配置与管理指南详细过程

    Docker网络是容器间通信和与外部世界交互的基础,通过自定义网络,可以实现容器间的隔离、静态 IP 分配和服务发现,这篇文章主要介绍了docker network 自定义网络配置与管理指南,需要的朋友可以参考下
    2025-05-05
  • 详解制作各种docker镜像

    详解制作各种docker镜像

    本篇文章主要介绍了制作各种docker镜像,详解的介绍了各种制作的docker镜像的方法,有兴趣的可以了解一下
    2017-05-05
  • Docker容器内应用服务自启动的方法示例

    Docker容器内应用服务自启动的方法示例

    这篇文章主要介绍了Docker容器内应用服务自启动的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • docker之MySQL同步数据的实现

    docker之MySQL同步数据的实现

    本文主要介绍了docker之MySQL同步数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • docker删除none镜像的操作方法

    docker删除none镜像的操作方法

    删除none的镜像,要先删除镜像中的容器,要删除镜像中的容器,必须先停止容器,这篇文章主要介绍了docker删除none镜像的操作方法,需要的朋友可以参考下
    2023-01-01
  • 基于Docker部署Dubbo+Nacos服务的过程

    基于Docker部署Dubbo+Nacos服务的过程

    这篇文章主要介绍了基于Docker部署Dubbo+Nacos服务,本文介绍基于 Docker 部署一套 Dubbo + Nacos 的微服务环境,并解决容器里的 IP 及端口的访问问题,需要的朋友可以参考下
    2023-02-02

最新评论