postgres单机热备---物理备份

在线热备份(归档)
(一)备份
归档路径:/hgbackup/archivedir/
PGDATA:/opt/pgsql-9.4.4/data/
1、配置归档模式
配置归档需要编辑postgresql.conf文件,默认在$PGDATA目录下
vim $PGDATA/postgresql.conf
archive_mode = on
archive_command = 'test ! -f /hgbackup/archivedir/%f && cp %p /hgbackup/archivedir/%f' 
wal_level = archive



注:%p要被归档的日志文件的路径,%f是要被归档的日志文件的文件名
以上参数需要重启生效。
2、启动数据库
pg_ctl –D /opt/pgsql-9.4.4/data start    //pg_ctl start

3、创建数据库arch
createdb arch

4、创建表插入记录
psql arch
arch=# create table tb(a int);
arch=# insert into tb(a) values(1);

5、创建备份
arch=# select pg_start_backup('baseline');

6、备份整个data目录
tar -jcv -f /hgbackup/archivedir/baseline.tar.bz2 /opt/pgsql-9.4.4/data/
7、停止备份
psql arch
arch=# select pg_stop_backup();

8、插入新记录,然后切换日志,重复3次
arch=# insert into tb(a) values(2);
arch=# select pg_switch_xlog();
arch=# insert into tb(a) values(3);
arch=# select pg_switch_xlog();
arch=# insert into tb(a) values(4);
arch=# select pg_switch_xlog();

9、把/data/pg_xlog/下的WAL日志文件复制到预设的归档目录下,保证产生的WAL日志都已归档。
cp -r /opt/pgsql-9.4.4/data/pg_xlog/ /hgbackup/archivedir/

(二)恢复
1、停止数据库
pg_ctl –D /opt/pgsql-9.4.4/data/ stop

2、删除/data/

mv /opt/pgsql-9.4.4/data/ /opt/pgsql-9.4.4/data1/
3、恢复备份
tar -jxv -f /hgbackup/archivedir/baseline.tar.bz2 -C /
4、清空/data/pg_xlog/目录下所有文件
rm -rf /opt/pgsql-9.4.4/data/pg_xlog/
5、创建/pg_xlog/及其下面的archive_status目录
mkdir /opt/pgsql-9.4.4/data/pg_xlog/
mkdir /opt/pgsql-9.4.4/data/pg_xlog/archive_status
6、在/data/目录下创建recovery.conf  //恢复目录文件
vim /opt/pgsql-9.4.4/data/recovery.conf
restore_command='cp /hgbackup/archivedir/%f "%p"'
//告诉系统如何拿回归档的wal文件段


7、启动数据库
pg_ctl –D /opt/pgsql-9.4.4/data/ start
一切正常的话数据库就会自动应用WAL日志进行恢复
8、查看数据库arch是否恢复
psql arch
arch=# select * from tb;
a
---
1
2
3
4
(4 rows)

至此,数据已经成功恢复!
 
lsof -i:5432  查看端口情况









2.冷备份
另一个备份的策略是直接拷贝PostgreSQL的PGDATA目录。 你可以用自己喜欢的任何常用文件系统备份的方法, 例如: 
tar -cf backup.tar $PGDATA
有两种限制:
①为了进行有效的备份,数据库服务器必须被关闭。
②文件系统的备份只适用于一个数据库集群的完整恢复。 
3、单机热备
如果在复制备份文件中需要更大的灵活性,较低的水平过程可更好用于单机热备份。 为了准备低水平单机热备份,设置wal_level到 archive或者更高, archive_mode为 on,并且只有当开关文件存在时, 建立archive_command执行存档。例如: 
archive_command = 'test ! -f /var/lib/pgsql/backup_in_progress || (test ! -f /var/lib/pgsql/archive/%f && cp %p /var/lib/pgsql/archive/%f)'
当/var/lib/pgsql/backup_in_progress存在时,这个命令将执行归档。 否则默默返回零退出状态(允许PostgreSQL回收不需要的WAL文件)。 
有了这个准备,备份可以使用如下脚本: 
touch /var/lib/pgsql/backup_in_progress
psql -c "select pg_start_backup('hot_backup');"
tar -cf /var/lib/pgsql/backup.tar /var/lib/pgsql/data/
psql -c "select pg_stop_backup();"
rm /var/lib/pgsql/backup_in_progress
tar -rf /var/lib/pgsql/backup.tar /var/lib/pgsql/archive/
开关文件/var/lib/pgsql/backup_in_progress是第一次创建, 使已完成的WAL文件的归档发生。在备份后删除开关文件。归档的WAL文件然后添加至备份, 使两个基础备份和所有必需的WAL文件是相同的tar文件的一部分。 请记住,错误处理添加到您的备份脚本中。 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值