Linux 上 定时备份postgresql 数据库的方法

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

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

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

**

一 创建备份shell脚本

**
1.创建备份脚本存放路径:
mkdir -p /u01/db-bak/2/bak-file/all

mkdir -p /u01/db-bak/2/bak-file/all

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

cd /u01/db-bak/2

创建备份shell脚本

vim pgsql-all-backup.sh

shell脚本

#!/bin/bash
echo "开始执行 PostgreSql 数据库hrmw的备份!"
echo "backup ing -------------------"
nowtime=$(date +%F+%T)
export PGPASSWORD=123
echo "时间:" $nowtime
set timeout 500
/usr/pgsql-11/bin/pg_dump --file "/u01/db-bak/2/bak-file/all/pgsql-all-"$nowtime".backup" --host "10.10.10.100" --port "5432" --username "postgres" --dbname "hrmw" --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脚本
进入/u01/db-bak/2

cd /u01/db-bak/2

创建删除shell脚本

vim delete-pgbak.sh

删除shell脚本

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

**

三 配置定时任务

**
1.添加定时任务

[root@host-10-10-10-101 db-bak]# crontab -e   

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

30 23 * * * /u01/db-bak/2/delete-pgbak.sh

0 23 * * * /u01/db-bak/2/pgsql-all-backup.sh 

2.查看定时任务

[root@host-10-10-10-101 db-bak]# crontab -l
	30 23 * * * /u01/db-bak/2/delete-pgbak.sh

	0 23 * * * /u01/db-bak/2/pgsql-all-backup.sh

**

四 赋权限

**
配置权限chmod

chmod +x /u01/db-bak/2/*

**

五测试shell脚本

**

[root@host-10-10-10-101 2]# bash pgsql-all-backup.sh
开始执行 PostgreSql 数据库hrmw的备份!
backup ing -------------------
时间: 2020-12-17+14:47:53
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: 读取用户定义的外部服务器
......
数据库 hrmw2 备份结束!
[root@host-10-10-10-101 2]# bash delete-pgbak.sh
删除 8 天前的 数据库备份文件!
 8 天前的数据库备份文件删除完毕!

到此这篇关于Linux 上 定时备份postgresql 数据库的文章就介绍到这了,更多相关Linux 定时备份postgresql 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • linux实现mysql数据库每天自动备份定时备份

     概述 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程.而对于一些网站.系统来说,数据库就是一切,所以做好数据库的备份是至关重要的! 备份是什么? 为什么要备份 容灾方案建设 存储介质 光盘 磁带 硬盘 磁盘阵列 DAS:直接附加存储 NAS:网络附加存储 SAN:存储区域网络 云存储 这里主要以本地磁盘为存储介质讲一下计划任务的添加使用,基本的备份脚本,其它存储介质只是介质的访问方式可能不大一样. 1.

  • Linux CentOS 7源码编译安装PostgreSQL9.5

    之前的博客记录了通过rpm包的形式安装PostgreSQL 9.3(Linux CentOS 7 安装PostgreSQL 9.3(发行版本) ),本篇blog将记录一下通过源码编译的形式安装PostgreSQL 9.5. 下载 在postgresql的官方即可找到源码文件目录,地址如下:https://www.postgresql.org/ftp/source/,在下载列表中根据需求选择版本,如下图: 进入子目录后,可以看到文件列表: 如上图,可以看到提供了两种压缩格式,此处我们选择postg

  • 详解Linux中PostgreSQL和PostGIS的安装和使用

    安装 PostgreSQL 和 PostGIS PostgreSQL 和 PostGIS 已经是热门的开源工程,已经收录在各大 Linux 发行版的 yum 或 apt 包中.Ubuntu 为例,安装以下包即可: $ sudo apt-get install postgresql-client postgresql postgis -y RedHat 系列则请安装: $ sudo yum install postgresql-server postgresql postgis 初次安装后,默认生

  • Linux CentOS 7安装PostgreSQL9.3图文教程

    如题,本篇blog记录一下在Linux CentOS 7中安装PostgresSQL的整个过程以及数据库配置等,在Linux系统中,PostgreSQL的安装方式分两种,分别是: 1.二进制安装包安装 2.源码编译安装 由于我们没有什么特殊需求所在在此选择较为简单的方式--二进制安装包安装,二进制包安装的方法一般都是通过不同发行版本的Linux下的包管理器进行的,例如Debian和Ubuntu下是使用apt-get命令或aptitude命令来安装,命令如下: sudo apt-get insta

  • Linux shell实现每天定时备份mysql数据库

    每天定时备份mysql数据库任务,删除指定天数前的数据,保留指定天的数据: 需求:   1,每天4点备份mysql数据:   2,为节省空间,删除超过3个月的所有备份数据:   3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: #创建shell文件 vim backup_mysql.sh mysqldump -uroot -p123456 --all-databases > /data/dbdata/mysqlbak/`date +%Y%m%d`.sql find

  • Linux下创建Postgresql数据库的方法步骤

    前言 PostgreSQL (也叫 Postgres)是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行.因为之前用默认的配置创建pgsql数据库,导致root的占用率达到97%: 所以决定重新创建一次数据库,很多坑又忘了.为了避免以后再忘记,所以决定记录下面,分享出来供大家参考学习,下面来一起看看详细的介绍吧. 创建步骤如下: 创建一个放Data的文件夹,/majestic12/pgsql/data PGDATA = /majestic12/pgsql/

  • Linux 上 定时备份postgresql 数据库的方法

    为了避免操作数据库的风险 因此计划每天对postgresql 数据库 进行定时备份 1.服务器地址: 备份服务器地址 10.10.10.101(虚构) postgresql 数据库所在的服务器地址 10.10.10.100(虚构) 因为我有单独的备份数据库 不在同一个服务器上操作 首先要保证这两个服务器的网络是通的 我是运用shell脚本和Linux自带的定时任务进行的,操作步骤如下: ** 一 创建备份shell脚本 ** 1.创建备份脚本存放路径: mkdir -p /u01/db-bak/

  • Linux实现定时备份MySQL数据库并删除30天前的备份文件

    1. MySQL5.6以上版本 2. 修改 /etc/my.cnf 文件 # vim /etc/my.cnf [client] host=localhost user=你的数据库用户 password='你的数据库密码' 3. 编写数据库脚本 mysql-backup.sh # vim mysql-backup.sh #!/bin/bash backupDir=数据库备份目录 backupTime=`date +%Y%m%d%H%M%S` mysqldump 你的数据库 | gzip > $ba

  • linux实现定时备份mysql数据库的简单方法

    以下是详细步骤: 1.查看磁盘空间情况: [root@localhost backup]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 17G 2.7G 15G 16% / devtmpfs 476M 0 476M 0% /dev tmpfs 488M 0 488M 0% /dev/shm tmpfs 488M 7.7M 480M 2% /run tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/sda1

  • 自动定时备份sqlserver数据库的方法

    下面是我已经证实可用的自动备份的方法. 1.打开企业管理器->管理->sql server代理 2.新建一个作业,作业名称随便取,例如:data备份,所有者选择sa,当然你也可以选择其他用户,前提是该用户有执行作业的权限: 3.点击步骤标签,进入步骤面板.新建步骤,步骤名可以随便填写,如步骤1,类型和数据库默认,不需要修改.命令中写入以下语句: BACKUP DATABASE [数据库名] TO DISK = N'F:\\databack\\firenews备份' WITH NOINIT ,

  • Linux 每天自动备份mysql数据库的方法

    /usr/bin为mysql安装目录 建备份文件夹: mkdir mysql_data_bak 建脚本文件: touch autobackupmysql.sh 打开文件 vi autobackupmysql.sh 在脚本中加入如下内容: filename=`date +%Y%m%d` /usr/bin/mysqldump -opt mysql -u root -proot|gzip >/mysql_data_bak/name$filename.gz 这里注意了 一般的: ************

  • linux每天定时备份数据库并删除十天前数据详细步骤

    每天定时备份数据库需要用到Linux的定时任务,利用Linux的crondtab 命令.下面我们来看详细步骤: 一.写好shell脚本 mysqlbak.sh #!/bin/sh mysqldump -uroot -pmysqlroot xhblt | gzip > /mysqlbak/`date '+%Y-%m-%d_%H:%M:%S'`.sql.gz find /mysqlbak/ -mtime +10 -name "*.sql.gz" -exec rm -rf {} \;

  • linux定时备份MySQL数据库并删除以前的备份文件(推荐)

    备份数据库,这是必须会用到的,今天上午花了几个小时整理了一下,结果不错.下面详细的走一遍 一丶选择一个比较大位置来保存备份文件(创建文件就行) 使用mkdir来创建文件夹,这个简单. 二丶检查有没安装crond,如果没有,先安装 rpm -qa|grep cron  安装后会是 一般没有安装,所以先 yum -y install vixie-cron 然后再 yum -y install crontabs 这样服务就安装好了. 三丶写备份脚本 vi  /var/spool/cron/name.s

  • Python实现定时备份mysql数据库并把备份数据库邮件发送

    一.先来看备份mysql数据库的命令 mysqldump -u root --password=root --database abcDataBase > c:/abc_backup.sql 二.写Python程序 BackupsDB.py #!/usr/bin/python # -*- coding: UTF-8 -*- ''''' zhouzhongqing 备份数据库 ''' import os import time import sched import smtplib from em

  • 8种手动和自动备份MySQL数据库的方法

    作为流行的开源数据库管理系统,MySQL的使用者众多,为了维护数据安全性,数据备份是必不可少的.本文就为大家介绍几种适用于企业的数据备份方法. 使用MySQLDump进行MySQL备份 mysqldump是MySQL内置的工具,允许用户将数据库指定不同的选项备份到文件.服务器,甚至是压缩gzip文件中.mysqldump实用程序灵活,快速,可执行高级备份,并接受各种命令行参数,用户可通过这些参数来更改备份数据库的方式. Windows操作系统中的c:mysqlbin和Unix / Linux系统

随机推荐