如何在PostgreSQL中实现增量备份
来源:互联网 发布:怎么安装mac os x 编辑:程序博客网 时间:2024/05/17 03:18
简述
在postgres中,能够使用简单的pg_dump做某个数据库的完整备份。
此外,postgres中也同样能够实现增量备份,但针对的是整个数据库集群,即所有数据库都备份下来。
这里实现增量备份的思路是
1. 记录数据库系统的操作记录
2. 在某一时刻进行一次完整的数据库备份
3. 需要恢复时,还原上一次完整的数据库备份,根据操作记录恢复数据库至指定的某个时刻(即可以实现PITR 时间点恢复)
环境
系统:CentOS 6.5
数据库版本: Postgres 9.6
做法
开启postgres的WAL归档
WAL归档是记录对数据库的一些操作的序列文件,postgres将最近的WAL文件保存在 pg_xlog 中,所以我们还需要设置在产生WAL文件时将其持续保存到远程存储或者在本地的另外一个地方。WAL文件每个16MB,postgres自动进行分割。
1.1 在数据目录/var/lib/pgsql/9.6/data 中找到posstgresql.conf配置文件(数据目录可能不同),这里需要设置参数:
wal_level
设置保存操作日志的具体程度级别,要设置WAL归档至少要设置为replica
archive_mode
是否启用WAL归档 , 设置为on
archive_command
执行本地shell命令来归档已完成的WAL文件段,
%p表示每一个产生的WAL文件位置,%f表示该文件名,以下命令表示把新产生的WAL文件转储到指定目录中
后面的部分表示将正常输出,错误输出重定向到日志文件中,方便查看错误情况cp %p /mnt/server/archivedir/%f > /usr/local/pgsql/test.log 2>&1
(可选) archive_timeout
archive_timeout强制服务器定期切换到新的WAL段文件,以至于WAL文件不会太少
1.2 在成功配置之后,在/mnt/server/archivedir/下就能看到WAL归档文件
进行文件系统级别的备份
对postgres的数据库的数据目录 (我的是/var/lib/pgsql/9.6/data)进行压缩备份,作为系统的base backup2.1 在开始备份前,首先要在日志文件中做好标签
使用默认账号,登入psql,输入
select pg_start_backup('fullbackup');
2.2 开始备份文件系统,在另一终端中,压缩备份postgres的数据目录
tar -cvzf /var/lib/pgsql/9.6/pgdatabp20171112-1533.tar /var/lib/pgsql/9.6/data/
2.3 结束备份,在刚刚的数据库连接中输入
select pg_stop_backup();
2.4 此时再使用
ls -lsh
查看下/mnt/server/archivedir/能够看到备份标签打在的时间点2.5 到此时已经完成数据库的基本备份(连同整个数据库的配置,数据等),可以进行一些数据库操作,记录这些操作进行的时间,以便之后进行恢复系统可以看到结果
恢复系统
使用之前备份过的data文件夹替换原来的,添加recovery.conf脚本,重启postgres服务3.1 假设系统意外崩溃
kill -9 $(head -1 /var/lib/pgsql/9.6/data/postmaster.pid)
3.2 先将旧的data目录重命名为bad.data,然后用之前备份的data目录替换之
mv data bad.datatar -xvzf pgdatabp20171112-1533.tar mv var/lib/pgsql/9.6/data/ ./
3.3 启动一次数据库看看,看到的应该就是备份时的数据,并没有备份后的操作结果存在
/etc/init.d/postgresql-9.6 restart
3.4 将bad.data内尚未归档的WAL文件手动归档至新的data目录中的pg_xlog目录
cp /var/lib/pgsql/9.6/bad.data/pg_xlog/0* /var/lib/pgsql/9.6/data/pg_xlog
3.5 在新的data目录内创建一个recovery.conf配置文件
内容如下:
restore_command = 'cp /mnt/server/archivedir/%f %p > /var/lib/pgsql/9.6/recovery.log 2>&1 'recovery_target_time = '2017-11-12 16:20:00'
recovery_target_time 表示要恢复到的时间点
recovery.conf文件将使PostgreSQL从 /mnt/server/archivedir/文件夹中取得归档日志文件,并恢复数据更改,直到 2017-11-12 16:20:003.6 重启数据库
/etc/init.d/postgresql-9.6 restart
引用
官方文档– https://www.postgresql.org/docs/current/static/continuous-archiving.html#BACKUP-LOWLEVEL-BASE-BACKUP-DATA
教程– https://www.mkyong.com/database/postgresql-point-in-time-recovery-incremental-backup/
- 如何在PostgreSQL中实现增量备份
- 增量备份 PostgreSQL
- PostgreSQL增量备份
- postgresql-9.3的增量备份
- 在rman增量备份中,有差异增量和累积增量的概念
- Linux 增量备份实现
- mysql实现增量备份
- mysql实现增量备份
- mysql实现增量备份
- PostgreSQL 增量备份详解以及相关示例
- PostgreSQL 增量备份详解以及相关示例
- PostgreSQL使用barman进行增量备份
- 如何在PostgreSQL中备份和恢复一张表(包含表结构)
- 如何在postgreSQL中选择数据库?
- 详解如何在postgresql中注入
- postgresql如何在centos中安装
- 【postgresql】在postgresql中使用limit实现select top x
- postgresql如何备份与恢复
- 线程的状态
- Python入门——while
- VS2013安装部署项目为安装包超详细
- 03-元素定位-基本
- 用于多(情况多)路选择的:switch语句(无break跳出)
- 如何在PostgreSQL中实现增量备份
- telephonyManager的使用
- 字符串搜索函数应用
- C语言与指针学习笔记
- 剑指offer每日一刷-2017年11月12日
- MySQL install
- 朴素贝叶斯的python代码实现
- 王学岗代理模式
- Android 简单断点续传|下载到本地