postgres物理备份与恢复
操作系统:centos 6.5 64
数据库:postgres 9.5.1
1冷备份与恢复
文件系统级别的备份是冷备份,需要停止数据库。
1.1操作步骤
(1)停止数据库
pg_ctl -D /pgdb/data stop -m fast
(2)备份数据库
tar -jcvf /pgdb/backup/filebackup.tar.bz2 /pgdb/data
(3)删除/pgdb/data目录
rm –r /pgdb/data
(4)解压备份文件到原目录
tar -jxvf /pgdb/backup/filebackup.tar.bz2–C /
(5)启动数据库
pg_ctl -D /pgdb/data start
2热备份
PITR原理
postgres在数据目录中pg_xlog中始终维护着一个wal日志。这个日志文件用于记录数据库数据文件的所有改变。当数据库出现故障时,能够通过某个时间点的全备份+重做归档日志文件(可以指定重做时间点)把数据库恢复到全备份之后的任意时间点位置。
2.1基础-日志归档
配置归档需要编辑postgresql.conf文件,默认位置在../data/目录下
(1)固定目录
vim /pgdb/data/postgresql.conf
archive_mode= on
archive_command= 'cp %p /pgdb/backup/archived_log/%f'
wal_level= archive
注:%p要被归档的日志文件的路径,%f是要被归档的日志文件的文件名
(2)禁用
archive_mode= on
archive_command= '/bin/date' #(change requires restart)
备注:这种归档的禁用或启用需要通过修改postgresql.conf文件来控制,并且修改之后还需要reload 操作,步骤较烦琐。
(3)使用逻辑或运算
archive_mode= on
archive_command= 'test ! -f /pgdb/backup/archived_log || cp %p /pgdb/backup/archived_log/%f '
备注:这里使用了逻辑或运算,当文件标识/pgdb/backup/archived_log存在时,则会运行之后的归档命令。
(4)shell判断语句
archive_mode= on
archive_command= 'if [ -f "/pgdb/backup/archived_log " ]; then cp %p /pgdb/backup/archived_log/%f; fi'
(5)archive_command中控制每天生成一个归档目录(生成环境建议)
archive_command= 'DIR=/pgdb/backup/archived_log/`date +%F`; test ! -d $DIR && mkdir -p $DIR; test ! -f $DIR/%f && cp %p$DIR/%f'
写脚本直接每天备份前一天归档目录(如果是当天,管理不便) 脚本 vi /pgdb/backup_archlog.sh #!/bin/bash echo " `date +"%Y-%m-%d %H:%M:%S"` start backuped to `date -d "-1 day" +%F` archlog" > /pgdb/backup1/archived_log/`date -d "-1 day" +%F`.log 2>&1 cp -r /pgdb/backup/archived_log/`date -d "-1 day" +%F` /pgdb/backup1/archived_log/ echo " `date +"%Y-%m-%d %H:%M:%S"` end backuped to `date -d "-1 day" +%F` archlog" >> /pgdb/backup1/archived_log/`date -d "-1 day" +%F`.log 2>&1 chown -R postgr |