[postgresql]逻辑备份与还原

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: [postgresql]逻辑备份与还原

前言

Postgres提供pg_dumppg_dumpall用于数据库逻辑备份。

  • pg_dumpall:将一个PostgreSQL数据库集群全部转储到一个脚本文件中
  • pg_dump:可以选择一个数据库或部分表进行备份,生成的文件可以是一个SQL脚本文件,也可以是一个归档文件。SQL文件允许自行修改,修改后可以转到其它类型的数据库(postgres有不少特有的东西,实际上迁移可能会有问题)。归档文件只能和pg_restore配合使用。

逻辑备份

# 查看帮助
pg_dump --help
# 备份dbtest库到指定文件
pg_dump -h 127.0.0.1 -p 5432 -U postgres dbtest -f /var/lib/postgresql/backup/dbtest.sql
# 如果就在本地,也可以直接用dba账户备份
pg_dump dbtest -f /var/lib/postgresql/backup/dbtest.sql
# 导出为自定义格式, postgres建议的备份方式
pg_dump -Fc -h 192.168.0.10 -Uzhangsan zhangsan -f zhangsan.dump

逻辑还原

# 使用dump文件还原到zhangsan2数据库,需要先创建
pg_restore -d zhangsan2 zhangsan.dump

备份脚本

postgresql使用docker安装。宿主机调用容器内部的备份脚本,然后从容器中拷贝出来。

  • 容器内的备份脚本:/root/backup_in_docker.sh
#!/bin/bash
# description: 配在容器里的备份脚本,需要放到容器内的/root路径
set -u
function premkdir() {
    # 提前创建目录
    mkdir -p /root/backup
}
function cleandir() {
    # 清理备份目录
    cd /root/backup
    rm -f ./*
}
function backup() {
    # 执行备份
    pg_dump -U postgres -Fc wikijs -f /root/backup/wikijs.dump
}
function main() {
    # 主函数
    premkdir
    cleandir
    backup
}
main
  • 宿主机的备份脚本:/home/apps/postgresql/backup_in_host.sh
#!/bin/bash
# description: 调用容器内的备份脚本 -> 将备份文件拷贝到宿主机 -> 归档 -> 删除历史文件
function log_info() {
    # 日志函数
    logfile="/home/apps/postgresql/backup.log"
    logtime=$(date "+%Y-%m-%d %H:%M:%S")
    echo "${logtime} | $@"
    echo "${logtime} | $@" >> ${logfile}
}
function exe_backupscript_docker() {
    # 调用容器内的备份脚本
    log_info "调用容器内备份脚本"
    /usr/local/bin/docker exec -it postgresql bash /root/backup_in_docker.sh
    # 等60秒
    sleep 60
}
function copy_to_host() {
    # 将备份文件从docker容器内拷贝到宿主机
    /usr/local/bin/docker cp postgresql:/root/backup /home/apps/postgresql
    # cd /home/apps/postgresql
}
function cleanfile() {
    # 删除15天之前的备份文件
    find /home/apps/postgresql/archived_backupfiles/* -ctime +15 -type f -exec rm -f {} \;
    # 删除backup目录
    cd /home/apps/postgresql
    if [[ -d "./backup" ]]; then
        rm -rf ./backup
    fi
}
function arrange() {
    # 整理备份文件
    cd /home/apps/postgresql
    if [[ ! -d "./backup" ]]; then
        log_info "备份目录不存在"
        exit 1
    fi
    # 将压缩后的目录转移到归档目录
    archive_dir="/home/apps/postgresql/archived_backupfiles"
    if [[ ! -d ${archive_dir} ]]; then
        mkdir -p /home/apps/postgresql/archived_backupfiles
    fi
    baktime=$(date "+%Y%m%d-%H%M%S")
    bakname="wikijs_${baktime}.tar.gz"
    tar zcf ${bakname} ./backup
    mv ${bakname} ${archive_dir}
}
function main() {
    exe_backupscript_docker
    copy_to_host
    arrange
    cleanfile
}
main
  • crontab配置
0 3 * * * /home/apps/postgresql/backup_in_host.sh
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
10天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的逻辑存储结构
PostgreSQL的逻辑存储结构包括数据库集群、数据库、表空间、段、区、块等。每个对象都有唯一的对象标识符OID,并存储于相应的系统目录表中。集群由单个服务器实例管理,包含多个数据库、用户及对象。表空间是数据库的逻辑存储单元,用于组织逻辑相关的数据结构。段是分配给表、索引等逻辑结构的空间集合,区是段的基本组成单位,而块则是最小的逻辑存储单位。
【赵渝强老师】PostgreSQL的逻辑存储结构
|
4月前
|
存储 关系型数据库 数据库
PostgreSQL的备份策略
【8月更文挑战第4天】PostgreSQL的备份策略
133 4
|
4月前
|
存储 Ubuntu 关系型数据库
如何在 Ubuntu VPS 上备份 PostgreSQL 数据库
如何在 Ubuntu VPS 上备份 PostgreSQL 数据库
32 1
|
4月前
|
关系型数据库 数据库 PostgreSQL
Linux 环境手动备份postgresql数据库
【8月更文挑战第12天】在Docker环境中使用命令行工具对PostgreSQL数据库进行备份和恢复。首先,通过dockerexec进入容器,使用pg_dump进行数据库模式的备份,然后使用dockercp将备份文件导出。接着,若需导入数据到另一数据库,先将备份文件复制到目标容器,再利用psql命令进行数据恢复。整个过程需确保目标数据库无同名模式,以防止导入失败
47 3
|
4月前
|
存储 监控 关系型数据库
PostgreSQL的备份策略是什么?
【8月更文挑战第4天】PostgreSQL的备份策略是什么?
58 7
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看PolarDB for PostgreSQL的备份信息
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
7月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL从小白到高手教程 - 第41讲:postgres表空间备份与恢复
PostgreSQL从小白到高手教程 - 第41讲:postgres表空间备份与恢复
203 1
|
7月前
|
SQL 关系型数据库 分布式数据库
PolarDB for PostgreSQL逻辑复制问题之逻辑复制冲突如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。
|
7月前
|
Kubernetes 关系型数据库 分布式数据库
PolarDB for PostgreSQL备份问题之备份损坏如何解决
PolarDB for PostgreSQL是基于PostgreSQL开发的一款云原生关系型数据库服务,它提供了高性能、高可用性和弹性扩展的特性;本合集将围绕PolarDB(pg)的部署、管理和优化提供指导,以及常见问题的排查和解决办法。
|
7月前
|
关系型数据库 数据库 PostgreSQL
postgresql|数据库|恢复备份的时候报错:pg_restore: implied data-only restore的处理方案
postgresql|数据库|恢复备份的时候报错:pg_restore: implied data-only restore的处理方案
282 0