Linux 上 定时备份 postgresql 数据库

news/2024/7/9 21:39:27 标签: 数据库, linux, postgresql, 服务器, 运维

Linux 上 定时备份 postgresql 数据库

为了避免操作数据库的风险 因此计划每天对 postgresql 数据库 进行定时备份

1.服务器地址:备份服务器地址 10.10.10.101(虚构)postgresql 数据库所在的服务器地址 10.10.10.100(虚构)

因为我有单独的备份数据库 不在同一个服务器上操作 首先要保证这两个服务器的网络是通的我是运用 shell 脚本和 Linux 自带的定时任务进行的,操作步骤如下:

一、创建备份 shell 脚本

1.创建备份脚本存放路径:mkdir -p /opt/pgdatabak

mkdir -p /opt/pgdatabak

我把 shell 脚本存放在/u01/db-bak/2 备份后的 pgsql.backup 放到 /u01/db-bak/2/bak-file/all 文件中

2.准备 shell 脚本进入 /opt/pgdatabak

cd /opt/pgdatabak

3.创建备份 shell 脚本

vi pgbak.sh

shell 脚本

#!/bin/bash
echo "开始执行 PostgreSql 数据库【oyzData_GuangXi_JeecgBoot_postgresql】的备份!"
echo "backup ing -------------------"
nowtime=$(date +%F+%T)
export PGPASSWORD=123
echo "时间:" $nowtime
set timeout 500
/usr/pgsql-12/bin/pg_dump --file "/opt/pgdatabak/pgsql-all-"$nowtime".backup" --host "127.0.0.1" --port "5432" --username "postgres" --dbname "oyzData_GuangXi_JeecgBoot_postgresql" --verbose --role "postgres" --format=c --blobs --encoding "UTF8"
echo "数据库 hrmw 备份结束!"
exit;

nowtime=$(date +%F+%T) --当前时间 PGPASSWORD='数据库密码'

pg_dump 的用法

~
用法:
  pg_dump [选项]... [数据库名字]
~
一般选项:
  -f, --file=FILENAME          输出文件或目录名
  -F, --format=c|d|t|p         输出文件格式 (定制, 目录, tar
                               明文 (默认值))
  -j, --jobs=NUM               执行多个并行任务进行备份转储工作
  -v, --verbose                详细模式
  -V, --version                输出版本信息,然后退出
  -Z, --compress=0-9           被压缩格式的压缩级别
  --lock-wait-timeout=TIMEOUT  在等待表锁超时后操作失败
  --no-sync                    不用等待变化安全写入磁盘
  -?, --help                   显示此帮助, 然后退出
~
控制输出内容选项:
  -a, --data-only              只转储数据,不包括模式
  -b, --blobs                  在转储中包括大对象
  -B, --no-blobs               排除转储中的大型对象
  -c, --clean                  在重新创建之前,先清除(删除)数据库对象
  -C, --create                 在转储中包括命令,以便创建数据库
  -E, --encoding=ENCODING      转储以ENCODING形式编码的数据
  -n, --schema=SCHEMA          只转储指定名称的模式
  -N, --exclude-schema=SCHEMA  不转储已命名的模式
  -o, --oids                   在转储中包括 OID
  -O, --no-owner               在明文格式中, 忽略恢复对象所属者
  -s, --schema-only            只转储模式, 不包括数据
  -S, --superuser=NAME         在明文格式中使用指定的超级用户名
  -t, --table=TABLE            只转储指定名称的表
  -T, --exclude-table=TABLE    不转储指定名称的表
  -x, --no-privileges          不要转储权限 (grant/revoke)
  --binary-upgrade             只能由升级工具使用
  --column-inserts             以带有列名的INSERT命令形式转储数据
  --disable-dollar-quoting     取消美元 (符号) 引号, 使用 SQL 标准引号
  --disable-triggers           在只恢复数据的过程中禁用触发器
  --enable-row-security        启用行安全性(只转储用户能够访问的内容)
  --exclude-table-data=TABLE   不转储指定名称的表中的数据
  --if-exists                  当删除对象时使用IF EXISTS
  --inserts                    以INSERT命令,而不是COPY命令的形式转储数据
  --load-via-partition-root    通过根表加载分区
  --no-comments                不转储注释
  --no-publications            不转储发布
  --no-security-labels         不转储安全标签的分配
  --no-subscriptions           不转储订阅
  --no-synchronized-snapshots  在并行工作集中不使用同步快照
  --no-tablespaces             不转储表空间分配信息
  --no-unlogged-table-data     不转储没有日志的表数据
  --quote-all-identifiers      所有标识符加引号,即使不是关键字
  --section=SECTION            备份命名的节 (数据前, 数据, 及 数据后)
  --serializable-deferrable    等到备份可以无异常运行
  --snapshot=SNAPSHOT          为转储使用给定的快照
  --strict-names               要求每个表和(或)schema包括模式以匹配至少一个实体
  --use-set-session-authorization
                               使用 SESSION AUTHORIZATION 命令代替
                               ALTER OWNER 命令来设置所有权

联接选项:
  -d, --dbname=DBNAME      对数据库 DBNAME备份
  -h, --host=主机名        数据库服务器的主机名或套接字目录
  -p, --port=端口号        数据库服务器的端口号
  -U, --username=名字      以指定的数据库用户联接
  -w, --no-password        永远不提示输入口令
  -W, --password           强制口令提示 (自动)
  --role=ROLENAME          在转储前运行SET ROLE

如果没有提供数据库名字, 那么使用 PGDATABASE 环境变量
的数值.

二、创建定时清除备份 shell 脚本

每天进行数据库备份 如果不清理会占用许多的内存 而手动清理又太麻烦了 所有还是让他自动执行吧

路径与备份 shell 一致 便于管理 这里就不需要创建了 1..准备 shell 脚本进入 /opt/pgdatabak

cd /opt/pgdatabak

创建删除 shell 脚本

vim  delete-pgbak.sh

删除 shell 脚本

#!/bin/bash
echo "删除 8 天前的 数据库备份文件!"
find /opt/pgdatabak -name "pgsql-all*" -mtime +7 -exec rm -rf {} \;
set timeout 1000
echo " 8 天前的数据库备份文件删除完毕!"

三、配置定时任务

1.添加定时任务

[root@localhost pgdatabak]# crontab -e

每天 23 点进行数据库备份脚本 每天 23 点半运行删除脚本

30 23 * * * /opt/pgdatabak/delete-pgbak.sh

0 23 * * * /opt/pgdatabak/pgbak.sh

2.查看定时任务

[root@localhost pgdatabak]# crontab –l
30 23 * * * /opt/pgdatabak/delete-pgbak.sh

0 23 * * * /opt/pgdatabak/pgbak.sh

四、赋权限

chmod +x /opt/pgdatabak/pgbak.sh
chmod +x /opt/pgdatabak/delete-pgbak.sh

五、测试 shell 脚本

[root@localhost pgdatabak]# ./pgbak.sh
开始执行 PostgreSql 数据库【oyzData_GuangXi_JeecgBoot_postgresql】的备份!
backup ing -------------------
时间: 2023-04-11+15:25:38
pg_dump: 最后的内置 OID 是 16383
pg_dump: 读扩展
pg_dump: 识别扩展成员
pg_dump: 读取模式
pg_dump: 读取用户定义表
pg_dump: 读取用户定义函数
pg_dump: 读取用户定义类型
pg_dump: 读取过程语言
pg_dump: 读取用户定义聚集函数
pg_dump: 读取用户定义操作符
pg_dump: 读取用户定义的访问方法
pg_dump: 读取用户定义操作符集
pg_dump: 读取用户定义操作符
pg_dump: 读取用户定义的文本搜索解析器
pg_dump: 读取用户定义的文本搜索模板
pg_dump: 读取用户定义的文本搜索字典
pg_dump: 读取用户定义的文本搜索配置
pg_dump: 读取用户定义外部数据封装器
pg_dump: 读取用户定义的外部服务器
pg_dump: 正在读取缺省权限
pg_dump: 读取用户定义的校对函数
pg_dump: 读取用户定义的字符集转换
pg_dump: 读取类型转换
pg_dump: 读取转换
pg_dump: 读取表继承信息
pg_dump: 读取事件触发器
pg_dump: 查找扩展表
pg_dump: 正在查找关系继承
pg_dump: 正在读取感兴趣表的列信息
......
pg_dump: 正在转储表"public.sys_user"的内容
pg_dump: 正在转储表"public.sys_user_agent"的内容
pg_dump: 正在转储表"public.sys_user_depart"的内容
pg_dump: 正在转储表"public.sys_user_role"的内容
数据库 hrmw 备份结束!
[root@localhost pgdatabak]#
[root@localhost pgdatabak]# bash delete-pgbak.sh
删除 8 天前的 数据库备份文件!
 8 天前的数据库备份文件删除完毕!

http://www.niftyadmin.cn/n/212223.html

相关文章

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒🛫 导读开发环境1️⃣ 第8关:多级指针翻译操作验证其它方案🛬 文章小结📖 参考资料🛫 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关:多…

Linux 格式化磁盘,制作文件系统 => 报错: dev/sdb is NOT identified.

前言 在学习 ARM S5PV210 开发板的时候, SD 卡烧录时总是失败,报错信息: dev/sdb is NOT identified.经过实践,发现格式化 SD 卡可以解决该问题;或者使用命令 ls /dev/sdb 发现 sdb 块设备的文件类型不是 b&#xff…

初识Go语言10-函数【函数的基本形式、匿名函数】

文章目录函数参数函数参数函数的基本形式匿名函数函数 参数 函数参数 函数定义时指出,函数定义时有参数,该变量可称为函数的形参。形参就像定义在函数体内的局部变量。 但当调用函数,传递过来的变量就是函数的实参,函数可以通…

分支语句和循环语句

文章目录1. 什么是语句?2. 分支语句(选择结构)2.1 if语句2.1.1 悬空else2.1.2 if书写形式的对比2.2 switch语句2.2.1 在switch语句中的break2.2.2 default子句2.2.3 练习3. 循环语句3.1 while循环3.1.1 while语句中的break和continue3.2 for循…

Linux从命令行管理文件

目录 一、创建链接文件 二、目录操作命令 1. 创建目录(make directory) 2. 统计目录及文件的空间占用情况 3. 删除目录文件 三、创建、删除普通文件 文件命名规则: (1)不能使用/来当文件名,/是用来做…

套接字通信基础

套接字通信基础概述套接字通信基础套接字类型socket模型创建流程分析套接字创建socket()套接字绑定bind()套接字监听listen()套接字接受连接请求accept套接字连接套接字数据传输套接字通信实例服务器端代码客户端代码应用场景总结概述 套接字通信是在Linux系统中实现进程间通信…

没有什么壁纸比这里的更绝美精致了吧,我一天换一张

嗨,这里是清安,本章来学习学习获取精美壁纸。视频教程:https://b23.tv/iR7bOFF源码:https://gitee.com/qinganan_admin/reptile-case/tree/master/%E5%A3%81%E7%BA%B8本视频还会有第二期,代码也会有第二份,…

CMMI 3.0究竟有哪些变化?

新鲜出炉,CMMI 3.0究竟有哪些变化? 2023年4月6日,ISACA(国际信息系统审计协会)下属的CMMI研究院发布了CMMI 3.0版本。有哪些具体的变化呢?本文做了系统梳理,分为更名、新增、删除、实践域内的变…