postgresql定时备份,增量备份
**
注:
1. 以下命令大都是root用户登录输入,有问题请查看是否是权限问题
2.中文为方便理解,实际操作不要在里面写中文
3.路径请根据对应数据库安装位置修改
**
一: 开启日志归档
1: 配置文件修改
vim /home/postgresql/bin/postgresql.conf
#开启日志归档
wal_level = replica
archive_mode = on
#归档日志压缩存入 /home/postgresql/db/back/ %f是文件名,不需要改
archive_command = ‘bzip2 < %p > /home/postgresql/db/back/%f.bz2’
max_wal_senders = 10
hot_standby = on
可直接加入恢复时所需的配置,data文件夹下没有recovery.signal文件就不会启动恢复模式
#恢复时配置,从/home/postgresql/db/back/下读取日志
restore_command = ‘bunzip2 < /home/postgresql/db/back/%f.bz2 > %p’
#恢复到几点
recovery_target_time = ‘2021-7-08 11:17:00’
#最新
recovery_target_timeline = ‘latest’
备份
2: 防止备份失败,可先授予postgres用户权限
chown -R postgres:postgres /home/postgresql
chmod -R 700 /home/postgresql
3: 输入以下命令
#登录postgres用户
su postgres
#切换到数据库目录
cd /home/postgresql
#备份到 /home/postgresql/db/7-8 下,这个文件夹只能为空!
rm -rf /home/postgresql/db/7-8/*
#备分到 /home/postgresql/db/7-8
pg_basebackup -D /home/postgresql/db/7-8 -v -P
**
热备份脚本,每日定时执行备份
注 : 定时备份为每日备份数据库,实际上增量备份只需要备份一次数据库,之后会自动将日志归档到指定文件夹中,data下pg_wal下每条日志写满16.8MB会自动归档,也可手动触发归档 : psql postgres -c “select pg_switch_wal()” , 恢复时会自动从归档目录读取文件
1.编写定时脚本
vim /home/backup/pgsql/bin/backup.sh
#!/bin/bash
DATE=$(date '+%Y%m%d');
PG_HOME=/home/postgresql
PG_BACK=/home/postgresql/db/back
PG_BACKDATA=/home/postgresql/db/backdata
#START BACKUP
echo "chown -R postgres:postgres /home/postgresql chmod -R 700 /home/postgresql------------------------"
chown -R postgres:postgres $PG_HOME
chmod -R 700 $PG_HOME
echo "rm -rf /home/postgresql/db/backdata/* rm -rf /home/postgresql/db/back/*--------------------------"
rm -rf $PG_BACKDATA/*
rm -rf $PG_BACK/*
echo "START BACKUP...............pg_basebackup -D /home/postgresql/db/backdata-------------------------"
cd $PG_HOME
su postgres <<!
echo "back -------------------------"
pg_basebackup -D /home/postgresql/db/backdata
exit $?
!
echo "BACKUP END"
2.加入定时任务(多长时间执行一次,例子是每天8:00执行一次)
crontab -e
00 08 * * * /home/backup/pgsql/bin/backup.sh
查看定时任务
crontab -l
二: 恢复数据
留存当前数据库内容
mv /home/postgresql/data /home/postgresql/old_data_$(date ‘+%Y%m%d’)
1.将基本备份的数据copy并改名到data
mkdir /home/postgresql/data
cp /home/postgresql/db/7-8 /home/postgresql/data
2.有这个文件才会启动恢复模式,文件内不必有内容,归档完成会改名为recovery.signa
touch “/home/postgresql/data/recovery.signal”
4. 配置文件修改
vim /home/postgresql/data/postgresql.conf
#恢复时配置,从/home/postgresql/db/back/下读取日志
restore_command = ‘bunzip2 < /home/postgresql/db/back/%f.bz2 > %p’
#恢复到几点
recovery_target_time = ‘2021-7-08 11:17:00’
#最新
recovery_target_timeline = ‘latest’
5.防止启动失败,可先授予postgres用户权限
chown -R postgres:postgres /home/postgresql
chmod -R 700 /home/postgresql
6.启动数据库会以恢复模式启动
#备份文件生成是什么时间,恢复的时间只能比备份文件晚而不能比备份文件早!
/usr/pgsql-13/bin/pg_ctl -D /home/postgresql/data -l logfile start
恢复脚本(确定配置文件不需要更改再用)
以上为基本原理,如果配置文件不需要更改,可使用以下脚本
vim /home/backup/pgsql/bin/wal.sh
cd /home/postgresql
echo "mv data old_data--------------------------------------------------------------------------------"
mv /home/postgresql/data /home/postgresql/old_data_$(date '+%Y%m%d')
echo "mkdir /home/postgresql/data---------------------------------------------------------------------"
mkdir /home/postgresql/data
echo "cp -r /home/postgresql/db/backdata/* /home/postgresql/data-------------------------------------"
cp -r /home/postgresql/db/backdata/* /home/postgresql/data
echo "touch /home/postgresql/data/recovery.signal---------------------------------------------------"
touch "/home/postgresql/data/recovery.signal"
echo "chown -R postgres:postgres /home/postgresql chmod -R 700 /home/postgresql-----------------------"
chown -R postgres:postgres /home/postgresql
chmod -R 700 /home/postgresql
echo "/usr/pgsql-13/bin/pg_ctl -D /home/postgresql/data -l logfile start------------------------------"
su postgres <<!
/usr/pgsql-13/bin/pg_ctl -D /home/postgresql/data -l logfile start
exit $?
!
Windows10版备份恢复
流程和liunx一样,只是操作略微不同
备份
配置文件修改(其它同上面) :
备份归档:
archive_command = ‘copy “%p” “C:\java\postgresql\back\pg_wal\%f”’
恢复:
restore_command = ‘copy “C:\java\postgresql\back\pg_wal\%f” “%p”’
命令(不需要登录postgres用户,直接指定即可) :
开始备份(需要手动输入密码):
pg_basebackup -U postgres -D C:\java\postgresql\back\data -v -P
流程和liunx一样
备份就是修改配置文件,然后直接输入命令
恢复
1.修改data文件夹名保存原数据,也可能不是data,以实际为准
2.将备份数据复制过来,文件名为数据库名(data)
3.在data下创建recovery.signal
4.恢复时需要设置用户权限,默认启动并不是以管理员启动服务,所以先设置权限
5.启动服务,手动或者在管理-服务中点击启动都行