PostgreSQL数据库备份脚本

scadm 2021年4月25日00:36:10
评论
270 2063字

备份整个data目录,且保留2周

#!/bin/bash
source /etc/profile
source ~/.bash_profile
export PGPASSWORD="xxxxxxxx"
command=/cache1/PostgreSQL/9.1/bin
base_time=`date +%Y%m%d%H%M`
log_time=`date +%c`
data_dir=/cache1/PostgreSQL/9.1
back_dir=/cache1/PostgreSQL/9.1/pgdata_bak
if [ ! -d $back_dir/base ];then
     mkdir -p $back_dir/base
     chown postgres:postgres $back_dir/base -R
fi
if [ ! -d $back_dir/archive ];then
    mkdir -p $back_dir/archive
    chown postgres:postgres $back_dir/archive -R
fi
if [ ! -d $back_dir/pg_xlog ];then
    mkdir -p $back_dir/pg_xlog
    chown postgres:postgres $back_dir/pg_xlog -R
fi
echo "################################ ${log_time} ###################################" >>/var/log/pgbackup.log
mv $back_dir/archive/ $back_dir/archive_${base_time}/ && mkdir $back_dir/archive/
chown postgres:postgres $back_dir/archive -R
${command}/psql -p 6543 -U postgres -c "SELECT pg_start_backup('${base_time}');" >>/var/log/pgbackup.log 2>&1
cd ${data_dir} && tar cfP ${back_dir}/base/data_${base_time}.tar data/
echo -e "Data tar success. n" >>/var/log/pgbackup.log
${command}/psql -p 6543 -U postgres -c "SELECT pg_stop_backup();" >>/var/log/pgbackup.log 2>&1
${command}/psql -p 6543 -U postgres -c "SELECT pg_switch_xlog();" >>/var/log/pgbackup.log 2>&1
cd ${back_dir} && tar cfP ${back_dir}/pg_xlog/archive_${base_time}.tar archive_${base_time}/ && rm -rf archive_${base_time}/
echo "PG_XLOG tar success." >>/var/log/pgbackup.log
find ${back_dir}/base/ -mtime +14 -exec rm -rf {} ;
find ${back_dir}/pg_xlog/ -mtime +14 -exec rm -rf {} ;

设置为每天凌晨3.30自动运行

31 3 * * 0 /bin/sh /usr/local/bin/XXX.sh

备份xlog文件

#!/bin/bash
source /etc/profile
source ~/.bash_profile
back_dir=/cache1/PostgreSQL/9.1/pgdata_bak
xlog_dir=/cache1/PostgreSQL/9.1/data/pg_xlog
if [ ! -d ${back_dir}/archive ];then
   mkdir -p ${back_dir}/archive
   chown postgres:postgres ${back_dir}/archive -R
fi
filename=`ls -lt ${xlog_dir}/archive_status|grep done|head -n 1 |awk '{print $NF}'|awk -F. '{print $1}'`
cd ${xlog_dir} && xlog_file=(`ls -lt| grep -v total | grep -v archive|grep -v "$filename"|awk '{print $NF}'`)
for file in ${xlog_file[@]}
do
 [[ ${xlog_dir}/${file} -nt ${xlog_dir}/${filename} ]] && rsync -aqz ${xlog_dir}/${file} ${back_dir}/archive/
done

设置为每5分钟运行一次

*/5 * * * * /bin/sh /usr/local/bin/xx.sh
继续阅读
scadm
  • 本文由 发表于 2021年4月25日00:36:10
  • 转载请务必保留本文链接:https://www.wscyun.com/1047
Linux自动备份脚本 运维

Linux自动备份脚本

要求:将/data目录下的所有文件cp到/var/backups目录下,文件以当天的日期命名。例如(/var/backups/data.20151103)。并且判断前一天的目录中的文件与当天的区别,如...
Ubuntu自动修改为本地源脚本 运维

Ubuntu自动修改为本地源脚本

搭建好本地源后,如果要一台台去修改sources.list文件比较麻烦,于是就整理了个脚本,只需要在VM上运行脚本即可更改成本地源。 下面脚本可以自动识别Ubuntu是12.04还是14.04版本,添...
tomcat应用自动部署脚本 运维

tomcat应用自动部署脚本

从远程服务器拷贝项目war包,替换web内容及properties文件 运行命令: xx.sh xxx(项目名称) #!/bin/bash RETVAL=0 workpath=/cache1 proj...
Centos7自动修改网卡名称脚本 运维

Centos7自动修改网卡名称脚本

用过Centos7的同学都会发现上面的网卡命名规则是不规范的,对于习惯了之前的eth或em的命名难免想要修改回去。 最近公司在定制Centos7时就提了这个需求,于是就写了个脚本在安装系统时运行脚本自...