前言

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

[postgresql]逻辑备份与还原的更多相关文章

  1. PostgreSQL 数据库备份与还原

    PostgreSQL 数据库备份与还原 目录 备份 还原 栗子 备份 PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以 ...

  2. mysql逻辑备份与还原工具mysqldump

    (一)mysqldump介绍 mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份: 实例下的所 ...

  3. Oracle数据库零散知识08 -- 逻辑备份和还原(转)

    一.介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程.逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程.物理备份即可在数 ...

  4. windows下postgresql数据库备份和还原

    1.通过cmd进入数据库的bin目录 cd C:\Program Files\PostgreSQL\9.6\bin 2.执行pg_dump备份命令,localhost 或者IP pg_dump -h ...

  5. postgresql逻辑备份工具pg_dump和pg_resotre学习

    (一)pg_dump备份 pg提供了pg_dump和pg_dumpall命令进行数据库的备份,pg_dumpall是将整个pg集群转储到一个脚本文件中,而pg_dump命令可以选择一个数据库或者部分表 ...

  6. PostgreSQL的备份与还原

    导出: cmd,然后一直cd,到PostgreSQL的bin下面,用其pg_dump程序: pg_dump -h localhost -U ivms864013 ivms864013 > G:\ ...

  7. mysql多线程备份与还原工具mydumper

    (一)mydumper介绍 之前我们已经学过如何使用mysqldump备份恢复数据库:<mysql逻辑备份与还原工具mysqldump>,就目前来说,mysqldump是使用最广泛的MyS ...

  8. POSTGRESQL 完美备份还原

    1.POSTGRESQL 完美备份还原 进入到Postgresql下的bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了.里面会找到pg_dump.exe.我们实际使用的就是 ...

  9. PostgreSQL备份与还原

    物理备份:整个数据库的数据目录及文件做备份:备份整个数据库的文件系统. 物理恢复:恢复整个数据库的文静系统. 物理备份方法: 开启归档 select pg_start_backup('backup—— ...

  10. (4.12)mysql备份还原——mysql逻辑备份之mysqldump

    关键词:mysql逻辑备份介绍,mysqldump,mysqldump最佳实践 我的相关文章:https://www.cnblogs.com/gered/p/9721696.html 正文 1.mys ...

随机推荐

  1. 【C++】初始化列表构造函数VS普通构造函数

    普通构造函数VS初始化列表构造函数 初始化列表构造函数最优先匹配问题 对于一个类而言,只要其中包含有初始化列表的构造函数,编译器在编译使用{}语法的构造时会最倾向于调用初始化列表构造函数,哪怕做类型转 ...

  2. rt下降40%?程序并行优化六步法

    1 背景 性能优化是我们日常工作中很重要的一部分,主要有以下原因: 降低服务器和带宽等硬件成本:用更少的资源处理更多的请求 提高现实世界的运行效率:人机处理效率存在数量级的偏差,同样机器世界的效率提升 ...

  3. 对promise的简单理解

    随着ES6的推行它的许多新特性受到了广大开发者的好评,比如promise,为什么使用这个promise呢,他具体能帮我们做些啥? 其实从字面意思上来理解promise就是承诺,比如:你命令你的手下本月 ...

  4. 区间数k大数查询

    题目 问题描述 给定一个序列,每次询问序列中第 l 个数到第 r 个数中第 K 大的数是哪个. 输入格式 第一行包含一个数 n,表示序列长度. 第二行包含 n 个正整数,表示给定的序列. 第三个包含一 ...

  5. 柏林噪声&幻想大陆地图生成

    序言 之前介绍过perlin噪声的实现,现在应用实践一下--程序化生成幻想大陆 这里使用的是perlin噪声倍频技术(也称分形噪声),详情传送门:柏林噪声算法 代码示例使用的是shadertoy的语法 ...

  6. Kruskal 重构树

    Kruskal 重构树 是一棵二叉树,一张 \(N\) 个点的无向连通图的 Kruskal 重构树有 \(2N-1\) 个节点. 叶子节点为原图中节点,非叶子节点有点权,表示想在原图上从一边的子树内的 ...

  7. MQ系列12:如何保证消息顺序性

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...

  8. java利用jni调用dll方法

    准备工作: 需要用到的插件jni4net:这个需要去官网下载:https://sourceforge.net/projects/jni4net/files/ (1)     jni4net 是一个开源 ...

  9. 【Leetcode】 #9 回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 - ...

  10. 韩顺平Spring体系化笔记(内含ioc,aop,动态代理等底层原理)

    Spring Spring 核心学习内容 IOC.AOP. JdbcTemplate.声明式事务 1.Spring 几个重要概念 Spring 可以整合其他的框架(Spring 是管理框架的框架) S ...