从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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Dockerfile常用命令的使用简介

    Dockerfile常用命令的使用简介

    这篇文章主要介绍了Dockerfile常用命令的使用简介,帮助大家更好的理解和学习使用Docker,感兴趣的朋友可以了解下
    2021-04-04
  • Docker私有仓库打开2375端口的实现

    Docker私有仓库打开2375端口的实现

    本文主要介绍了Docker私有仓库打开2375端口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 一篇文章让你搞清楚docker常用命令

    一篇文章让你搞清楚docker常用命令

    这篇文章主要介绍了一篇文章让你搞清楚docker常用命令的相关资料,需要的朋友可以参考下
    2022-11-11
  • 使用WSL修改docker文件存储位置具体步骤

    使用WSL修改docker文件存储位置具体步骤

    这篇文章主要为大家介绍了使用WSL修改docker文件存储位置具体步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 使用Docker将容器打成镜像的方法步骤

    使用Docker将容器打成镜像的方法步骤

    本文主要介绍了使用Docker将容器打成镜像的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • docker prune命令定时清理不常用数据的操作方法

    docker prune命令定时清理不常用数据的操作方法

    使用docker引擎服务时间久了,会发现磁盘空间越来越大,现在要删除关于docker相关不用的数据来释放磁盘空间,这篇文章主要介绍了docker prune命令 可定时清理不常用数据,需要的朋友可以参考下
    2022-10-10
  • docker 查看进程, 内存, cup消耗的情况

    docker 查看进程, 内存, cup消耗的情况

    这篇文章主要介绍了docker 查看进程, 内存, cup消耗的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 如何设置docker开机自启动,并设置容器自动重启

    如何设置docker开机自启动,并设置容器自动重启

    这篇文章主要介绍了如何设置docker开机自启动,并设置容器自动重启问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • docker安装prometheus和grafana的详细过程

    docker安装prometheus和grafana的详细过程

    prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示,这篇文章主要介绍了docker安装prometheus和grafana,需要的朋友可以参考下
    2023-02-02
  • Docker不同宿主机网络打通的操作方案

    Docker不同宿主机网络打通的操作方案

    这篇文章主要介绍了Docker不同宿主机网络打通的方案 ,本方式使用docker Swarm集群的方式创建overlay 网络进行打通,需要的朋友可以参考下
    2024-08-08

最新评论