PG据库备份与恢复实验 (PITR)
一、概述
此文档描述了Postgresql数据库备份方案, 当数据库发生崩溃时,如何利用备份恢复到崩溃前,保证数据库最少数据量丢失甚至不丢失;
二、备份恢复原理
运用在线备份以及即时恢复(PITR)原理,利用Postgresql 数据库的WAL(Write Ahead Logging )预写日志和基础备份( $PGDATA目录文件tar包 ),恢复到数据库崩溃前时间点,保证数据量最少丢失或者不丢失,如果数据库崩溃,我们就可以通过热备产生的备份文件data_bak.tar包 ($PGDATA目录文件tar包)和archive_command产生的WAL及我们自己备份的WAL(pg_xlog)来进行数据库的 recovery 。
三、在线热备
1. 创建表,插入100W测试数据:
create table foo(id integer);
insert into foo values(generate_series(1,1000000));
2. 可以查看现在数据库的大小:
select oid from pg_dtabase where datname='postgres'; 返回 16384 ;
在base目录下找到该文件夹,进入16384文件夹,执行 du -sh查看大小。
或者可以执行
select pg_size_pretty(pg_database_size('postgres'));来查看大小
3.1 配置归档模式
配置归档需要编辑postgresql.conf文件,默认与 /usr/local/pgsql/data/
目录下
vi $PGDATA/postgresql.conf
,修改以下
|
注意:这里将WAL日志备份到 /home/postgres/archive 目录下,
pg_xlog/下的目录下可能还有未备份的数据,需要另外备份, 详见3.7。
3.2 重启动数据库
|
3.3 创建基础备份
|
3.4 备份整个data目录 (tar方式)
|
3.5 停止备份
|
3.6 切换日志
|
3.7 定期备份WAL新生成日志
如果单独通过archive_command来备份WAL的话, 能根本就做不到PITR, 因为pg_xlog/下面可能还有数据没有备份到archive_command指定的目录里;所以需要另外写脚本把/data/pg_xlog/下的WAL日志文件备份到预设的归档目录下,保证产生的WAL日志都已归档, 这里写了个脚本,每五分钟执行一次
每5分钟备份 (通过Crontab执行)
|
3.8 编写备份脚本hot_bak_post.sh (供参考)
附件:以上操作可以写个脚本,定时执行,热备脚本为 hot_bak_post.sh ,定时执行写在CRONTABL里,每周六零晨做一次BASE 备份。脚本内容如下,参考
|
说明:脚本已经测试,可以实现功能,目前还在完善中。
四、恢复
如果数据库崩溃,我们就可以使用热备产生的data_bak.tar包(即$PGDATA目录文件tar包)和archive_command产生的WAL及我们自己备份的WAL(pg_xlog)来进行数据库的 recovery,以下实验模拟数据库崩溃时的恢复过程
4.1 创建一张测试表
|
打开psql,往表中再插入100W条数据,使得总数据为200W:
insert into foo values(generate_series(1,1000000));
假定此时由于某种原因我们新的插入100万条记录的数据库出问题了,我们的疑问是可否利用前面的“基础备份库”+“新插入100万条记录所产生的WAL备份日志”恢复呢?
4.2 停数据库
|
4.3 删除data目录
|
4.4 恢复备份
|
4.5 修改 pg_hba.conf,避免普通用户服务连接
4.6 清空/data/pg_xlog/目录下所有文件
|
4.7 创建/pg_xlog/及其下面的archive_status目录
|
4.8 在/data/目录下创建recovery.conf
vi database/pgdata/tbs1/pg_root/data/recovery.conf
写入以下行
|
4.9 启动数据库
|
注意:切正常的话数据库就会自动应用WAL日志进行恢复
启动过程如有异常可以查看CSV日志,参数log_directory指定了日志目录(前提是你设置了日志记录功能);
4.10 查看数据库是否恢复
|
4.11 库分析
|
至此,数据已成功恢复!
五、后续工作
- 清理脚本
由于备份的tar包会越来越大,后续可以写些清理脚本,例如只保留最近几个tar包,其它的都删除掉等; - 由于WAL日志文件比较大,可以制定删除策略,定期删除备份目录WAL日志。
PG据库备份与恢复实验 (PITR)相关推荐
- pitr 原理_PostgeSQL 数据库备份与恢复实验 (PITR)
一.概述 此文档描述了Postgresql数据库备份方案, 当数据库发生崩溃时,如何利用备份恢复到崩溃前,保证数据库最少数据量丢失甚至不丢失: 二.备份恢复原理 运用在线备份以及即时恢复(PITR)原 ...
- postgresql-数据库备份与恢复操作方法
postgresql-数据库备份与恢复操作方法 pg:为postgresql数据库 常用的备份和还原命令 sql模式: 一.备份数据库tdcb_all的方法为: pg_dump -h localhos ...
- mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc
实验报告六MYSQL备份和恢复.doc 班级:10应用 姓名:张红珍 学号:2010081133 指导老师:钟老师 实验六 MYSQL备份与恢复 实验平台:安装MYSQL数据库的PC 实验目的:1.熟 ...
- 06 数据备份与恢复 实验报告
06 数据备份与恢复 实验报告 广州大学学生实 ...
- 【合天网安】CONN.ASP暴库漏洞实验
0x01预备知识 1.概念: 相对路径和绝对路径 绝对路径:例如D:/test/test.mdb 相对路径:例如/test/test.mdb 2.%5C暴库 简单点说,就是在打开页面的时候把网页中的/ ...
- mysql备份与恢复实验报告_实验十一 MySQLl备份与恢复1
实验十一MySQL备份与恢复 一.实验内容: 1. 使用SQL语句导入和导出表数据 2. 使用客户端工具备份还原数据库 3. 使用日志文件恢复数据库 二.实验项目:学生成绩数据库 创建用于学生成绩管理 ...
- matlab综合实验题库,数学实验matlab题库答案
数学实验matlab题库答案 更多相关问题 [多选题]色彩是一种涉及 __.__.与__的综合现象,色彩学是一门综合性的交叉学科. 继电接触器控制系统,它采用硬逻辑并行运行的工作方式 继电接触器控制系 ...
- MySQL 备份与恢复 实验示例
实验环境为虚拟机下CentOS 7系统下的实验过程 实验一;数据库的完全备份与恢复; (1)创建一个数据库,名叫benet (2)在benet数据库中,创建一个表student,表中有四个字段,分别是 ...
- MySQL36-数据库备份与恢复
一. 物理备份与逻辑备份 物理备份:备份数据文件,转储数据库物理文件到某一目录.物理备份恢复速度比较快,但占用空间比较大,MySQL中可以用 xtrabackup 工具来进行物理备份. 逻辑备份:对数 ...
最新文章
- 网络请求可以返回数据的网站_实例解析|Python加解密VIP网站反爬请求头实现数据爬取...
- 看事实风向的网站,做风向建模和出去放风筝,飞无人机的时候可以看一看~
- VTK:Filtering之ConnectivityFilter
- php object oriented,PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】...
- (计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射、直接映射和组相连映射)
- JavaWeb:Maven
- VBA操作WORD(二):替换字符(含空格、全角字符、换行符等)
- 小胜凭智,大胜靠德|北京
- 5个免费、优质视频素材网站,可商用
- java sencha_Sencha Cmd 5 Java 8错误
- 网络资源计算机教学设计,第11课 网络资源任我搜 教案
- 获取windows硬件、软件信息的方法
- jarsigner签名APK完整步骤
- Neuroimage | 孤独症与功能近红外光谱(fNIRS)综述
- 47.continue终止本次循环进入下一次循环
- Viper快速配置与上手
- 推荐学英语的电影及电视剧
- Spring Cloud Netfilx Ribbon(负载均衡工具)
- 视频监控换代升级,5G+AI助力视频监控的超高清化发展
- jfinal hutool工具 excelUtil ZipUtil实现导出excel并压缩文件