PostgreSQL定时备份

# PostgreSQL定时备份
# 版本:PostgreSQL14.0
# 一.如果你在pg_hba.conf中设定了密码登录,那么你就需要设置一个默认密码共psql登录的时候跳过验证。如果是root用户的话就加在/etc/profile文件末尾。如果是其他用户就加在用户目录下.bashrc文件末尾
export PGPASSWORD='默认密码'
# 二.开启WAL归档日志。
# 需要修改postgresql.conf配置文件:
wal_level = replica;   # 隔离级别
archive_mode = on;    # on打开,off关闭
archive_command = '/bin/date'   # 归档备份执行哪个shell指令

# archive_command 详细说明。
# WAL归档是自动的,触发条件有三个:1.手动强制切换 select pg_switch_wall(); 2.wal日志写满后。3.archive_tomeout(但该参数没在conf中找到该参数配置的位置)
# archive_command配置的就是这三个条件触发的时候执行的归档shell脚本,这里设置/bin/date是不让它帮忙备份,我们自己来备份,这样的好处是:定时每天备份、超过一定时间的备份自动删除。

# 三.编写我们自己的备份shell脚本
#!/bin/bash  
DATE=$(date '+%Y%m%d');
PG_ARCHIVE=/usr/pgdata/pg_arch         这是我自己的目录,不用管
PG_DATA=/usr/pgdata             替换你自己的PGDATA目录
PG_HOME=/root/Backup                替换成你要备份到哪
PG_HOSTNAME=192.168.0.100        服务器地址
PG_PORT=5432                端口

#START BACKUP
echo "START BACKUP..............."
psql -h $PG_HOSTNAME -p $PG_PORT -d postgres -U odoo -c "select pg_start_backup('hot_back')"
cd $PG_HOME
tar -zcvf ${PG_HOME}/pg_hotbackup_$DATE.tar.gz $PG_DATA
psql -h $PG_HOSTNAME -p $PG_PORT -d postgres -U odoo -c "select pg_stop_backup()"
echo "BACKUP  END"

# 四.将脚本加入到定时执行
# 需要安装crontab
# 查看是否安装:crontab -v
# 然后执行crontab -e添加任务
crontab -e
# 下面是设定凌晨五点执行dbbackup.sh脚本
0 5 * * * /root/PGDATA_Backup/dbbackup.sh

 

这是单个数据库的定时备份

#!/bin/bash
flist="/doc/Odoo"            # 这是你需要备份的文件夹
backupdir="/mnt/DBBackup"    # 这是备份后的压缩文件存放处
dabao="/tmp/bak"             # 这是临时文件夹
cp -aL $flist $dabao         # 将要备份的目录copy到临时文件夹中去
docker exec mysql sh -c 'exec mysqldump -u root -p"这里是密码,建议用环境变量,别用明文" DBName' > $dabao/DBName.sql        # 从mysql的docker环境中备份数据库到本地
docker exec postgres sh -c 'pg_dump -U postgres -f /bak/dbs/dbname.sql dbname'                                # 这是psql的docker中备份
docker cp postgres:/bak/databases $dabao/                                                                     # 将docker中的备份文件copy出来
cd $backupdir
tar -cf `date +%F`.tar.gz $dabao              # 将所有备份文件打包
rm -rf $dabao/*                               # 删除临时文件

find $backupdir -mtime +7 -exec rm -rf {} \;  # 删除超过七天的备份文件

 

posted @ 2021-11-10 09:15  看一百次夜空里的深蓝  阅读(1227)  评论(4编辑  收藏  举报