postgres物理备份与恢复
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 postgres /pgdb/backup_archlog.sh—赋予权限 chmod +x /pgdb/backup_archlog.sh –可执行 crontab -e添加内容,保存即可 |
2.2利用pg_start_backup 与pg_stop_backup()手工进行
步骤:
----备份
(1)创建数据库test:create database test;
(2)创建表并插入记录:
test=# create table testtb(a int) ;
test=# insert into testtb(a) values(1);
(3)使数据库处与备份状态(类似于oracle的begin backup)
test=# select pg_start_backup('baseline');
(4)操作系统tar命令备份整个data目录
tar -jcvf /pgdb/backup/baseline.tar.bz2 /pgdb/data
(5)停止备份
test =# select pg_stop_backup();
(6)插入新记录,然后切换日志3次
test=# insert into testtb (a) values(2);
test=# select pg_switch_xlog();
test=# insert into testtb (a) values(3);
test=# select pg_switch_xlog();
test=# insert into testtb (a) values(4);
test=# delete from testtb;
test=# insert into tb(a) values(5);
test=# select pg_switch_xlog();
(7)把/data/pg_xlog/下的WAL日志文件也复制到预设的归档目录下,保证产生的WAL日志都已归档(如果没有保存,在线日志文件损坏,那么数据会部分丢失)。
-----全库恢复到最新时间点
(1)停止数据库
pg_ctl–D /pgdb/data/ stop(或者直接kill数据库进程)
(2)删除/data
rm -r /pgdb/data
(3)恢复备份
tar -jxvf /pgdb/backup/baseline.tar.bz2 –C /
(4)清空/data/pg_xlog/目录下所有文件
rm -r /pgdb/data/pg_xlog/
(5)创建/sr_xlog/及其下面的archive_status目录
mkdir /pgdb/data/pg_xlog/
mkdir /pgdb/data/pg_xlog/archive_status
(6)在/data/目录下创建recovery.conf
vim/pgdb/data/recovery.conf
restore_command='cp /pgdb/backup/archived_log/%f %p'
--recovery-target-xid //恢复到那个事务
--recovery_target_time //恢复到一个时间点
(7)启动数据库
pg_ctl –D /pgdb/data/ start
数据库就会自动应用WAL日志进行恢复
(8)查看数据库test是否恢复
2.3利用pg_basebackup
封装了pg_start_backup 与pg_stop_backup()
命令:./pgdb_basebackup -D /pgdb/backup -Ft -z-P
(1)该工具使用replication协议连接到数据库实例,所以主库pg_hba.conf必须允许replication连接;
(2)数据库运行状态执行pg_basebackup -D /pgdb/backup -Ft -z -P
(3)异机恢复:拷贝备份文件改名data以及拷贝归档,配置recovery.conf文件,启动即可(需要归档文档)。
语法: pg_basebackup [option] -D directory 或--srdata=directory 备份路径 -F format或--format=format 输出格式p与tar -R, --write-recovery-conf 生成recovery.conf文件 -T, --tablespace-mapping=OLDDIR=NEWDIR 表空间重隐射 -x 或 --xlog 备份过程中产生的xlog文件也备份出来,使用该参数,需要设置wal_keep_segments以保证备份过程中,需要的wal日志不会被覆盖。 -X, --xlog-method=fetch|stream s表示备份开始后,启动另一个流复制连接从主库接收wal日志,这个方式避免了使用(-X f)时,主库上的wal日志有可能被覆盖而导致失败的问题,但这种方式需要与主库建2个连接,因此主库上max_wal_senders值大于等于3 -z, --gzip 仅能与tar输出配合使用 -Z, --compress=0-9 压缩级别 -l, --label=LABEL 备份标识 -v, --verbose 详细模式 -V, --version 版本信息 -?, --help 显示帮助 Connection options: -h, --host=HOSTNAME 主机 -p, --port=PORT 数据库端口 -s, --status-interval=INTERVAL指定向服务器端周期反馈状态的时间(如果服务器上配置了流复制的超时,在使用—xlog=s选项时,则需设置这个参数,默认10s,0表示不反馈) -U, --username=NAME 用户名 使用示例 1本地使用做备份 pg_basebackup -D /backup -Ft –z -P 之后可以拷贝到备库机做恢复 2远程备库机直接基础克隆 pg_basebackup -h xxxx -p 5432 -U dba -F p -P -x -R -D /pgdb/data |
2.4物理备份恢复之工具pg_rman
[postgres@pg2 bin]$pg_rman --help Usage: pg_rman OPTION init 初始化 pg_rman OPTION backup 备份 pg_rman OPTION restore 还原 pg_rman OPTION show [DATE] 查看 pg_rman OPTION show detail [DATE] 检查明细 pg_rman OPTION validate [DATE] 校验 pg_rman OPTION delete DATE 删除(delete删除备份文件) pg_rman OPTION purge 删除(purge删除备份目录中的备份信息) Common Options: -D, --pgdata=PATH 数据库存储路径 -A, --arclog-path=PATH WAL存储路径 -S, --srvlog-path=PATH server log存储路径 -B, --backup-path=PATH 备份存储路径 -c, --check 显示将要做什么 -v, --verbose 显示详细信息 -P, --progress show progress of processed files Backup options: -b, --backup-mode=MODE 备份模式选择full,incremental,or archive -s, --with-serverlog 同时备份server log文件 -Z, --compress-data 使用zlib压缩数据文件备份 -C, --smooth-checkpoint 备份之前进行checkpoint -F, --full-backup-on-error 如果pg_rman在当前时间线没有发现有效的全备,则进行全备,这个选项只用于--backup-mode=incremental or archive. --keep-data-generations=NUM keep NUM数量的全备 --keep-data-days=NUM keep相关的备份使其可以恢复到NUM天前 --keep-arclog-files=NUM keep NUM数量的WAL归档日志 --keep-arclog-days=DAY keep 归档 WAL日志DAY天 --keep-srvlog-files=NUM keep NUM数量的serverlogs --keep-srvlog-days=DAY keep serverlog DAY天 --standby-host=HOSTNAME 从standby备份时主机 --standby-port=PORT 从standby备份时端口 Restore options: --recovery-target-time 还原到某个时间 --recovery-target-xid 还原到某个xid --recovery-target-inclusive 是否恢复到恢复目标之后 --recovery-target-timeline 恢复到特殊的时间线 --hard-copy copying archivelog not symbolic link Catalog options: -a, --show-all 显示全部(包括已删除备份) Delete options: -f, --force 强制删除 Connection options: -d, --dbname=DBNAME 数据库名 -h, --host=HOSTNAME 主机名 -p, --port=PORT 端口 -U, --username=USERNAME 用户名 -w, --no-password 不提示密码 -W, --password 提示密码 Generic options: -q, --quiet 不显示任何INFO或者 DEBUG信息 --debug 显示 DEBUG 信息 --help 显示帮助,然后退出 --version 显示版本,然后退出 |
(1)首先要配置数据库归档(静态参数,需重启)
(2)创建数据库备份文件夹:mkdir /pgdb/backup/pg_rman
(3)初始化rman备份路径及参数:pg_rman init -B /pgdb/backup/pg_rman
(4)查看帮助:pg_rman --help
exportBACKUP_PATH=/pgdb/backup/pg_rman
exportARCLOG_PATH= /pgdb/backup/archived_log/`date +%F`
(5)备份:pg_rman backup -b full(incremental,archive)
pg_rmanbackup -A /pgdb/backup/archived_log/`date +%F` -b full -Z
//显示历史备份:pg_rmanshow
//验证:pg_rman validate
//详细显示某个备份:pg_rmanshow '2015-11-02 22:01:04'
//删除备份:pg_rmandelete -f 2015-11-02 22:01:04
6各种rman命令: init;backup;restore;show [DATE];show timeline [DATE];validate[DATE];delete DATE
7恢复:pg_rman restore --recovery-target-time"2015-07-19 23:04:01"
首先把时间点备份还原到指定路径,然后自动生成recovery.conf文件,并应用日志。
8启动数据库即可
注意:一般备份时提示需要输入密码
如果做脚本做自动任务备份会受影响
解决:在环境变量中
直接写密码:export PGPASSWORD=密码;
用密码文件:export PGPASSFILE=/文件路径/.pgpass
9示例:增量备份与恢复
备份与增量备份: pg_rman backup -b full pg_rman validate pg_rman show ========================================================== StartTime Mode Duration Size TLI Status ========================================================== 2015-11-02 21:57:01 FULL 0m 258MB 4 OK 之后新建表:create table test1(id int,name varchar(10)); pg_rman backup -b incremental -U dba pg_rman validate pg_rman show ========================================================== StartTime Mode Duration Size TLI Status ========================================================== 2015-11-02 22:00:31 INCR 0m 136MB 4 OK 2015-11-02 21:57:01 FULL 0m 258MB 4 OK 之后新建表:create table test2(id int,name varchar(10)); pg_rman backup -b incremental -U dba pg_rman validate pg_rman show ========================================================== StartTime Mode Duration Size TLI Status ========================================================== 2015-11-02 22:01:04 INCR 0m 136MB 4 OK 2015-11-02 22:00:31 INCR 0m 136MB 4 OK 2015-11-02 21:57:01 FULL 0m 258MB 4 OK --增量恢复 drop table test2;现在需求要恢复test2 pg_rman show '2015-11-02 22:01:04' # configuration BACKUP_MODE=INCREMENTAL FULL_BACKUP_ON_ERROR=false WITH_SERVERLOG=false COMPRESS_DATA=false # result TIMELINEID=4 START_LSN=0/68000028 STOP_LSN=0/680000b8 START_TIME='2015-11-02 22:01:04' END_TIME='2015-11-02 22:01:10' RECOVERY_XID=1956 //可以用作恢复时XID RECOVERY_TIME='2015-11-02 22:01:08' TOTAL_DATA_BYTES=134238904 READ_DATA_BYTES=2466014 READ_ARCLOG_BYTES=134218047 WRITE_BYTES=136647353 BLOCK_SIZE=32768 XLOG_BLOCK_SIZE=65536 STATUS=OK 1停止数据库 2 pg_rman restore --recovery-target-xid 1956 恢复过程之中,数据库自动选择利用增量备份进行恢复 3启动数据库即可 |
小结完成。
postgres物理备份与恢复相关推荐
- oracle物理备份与恢复,Oracle 备份与恢复概念原理学习
梳理下oracle中备份与恢复的概念原理--[@more@] 一.备份与恢复分逻辑和物理备份与恢复. 二.逻辑类:命令有EXP和IMP. 三.物理类:Noarchivelog和archivelog模式 ...
- Mysql 使用企业级MEB进行数据库物理备份与恢复
在免费下载并使用的MySQL开源社区版本中,默认并不包含MEB(MySQL Enterprise Backup,MySQL企业版备份工具)物理热备工具,因为它是一款Oracle自研的企业级软件,用户需 ...
- 《Linux运维实战:使用Percona XtraBackup物理备份与恢复Mysql数据》
一.Percona XtraBackup工具介绍 Percona XtraBackup是世界上唯一开源.免费的MySQL热备份软件,可为InnoDB和XtraDB数据库执行非阻塞备份.Percona ...
- postgres 物理格式
2019独角兽企业重金招聘Python工程师标准>>> Introduction to PostgreSQL physical storage November 9, 2015 I ...
- ch5 MySQL 备份与恢复
第 5 章 MySQL 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 My ...
- MySQL性能调优与架构设计——第5章 备份与恢复
第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...
- mysql数据备份与恢复_MySQL数据备份与恢复
常见的MySQL管工具 mysql 命令行 跨平台 MySQL官方bundle包自带 MySQL-Workbench 图形 跨平台 MySQL官方提供 MySQL-Front 图形 Windows 开 ...
- MySQL日志管理、备份与恢复
MySQL日志管理.备份与恢复 前言 一.MySQL日志管理 (1)日志分类 ①错误日志 ②通用查询日志 ③二进制日志 ④慢查询日志 ⑤中继日志 (2)日志配置 (3)日志查询 ①查询通用日志是否开启 ...
- 【mysql】mysql数据备份与恢复
数据的重要性不言而喻,所以做好数据的备份工作显得尤其必要,不知不觉我又开始扯犊子了.... 一.逻辑备份与恢复 数据库逻辑备份就是备份软件按照最初设计的逻辑关系,以数据库的逻辑结构对象为单位,将数据库 ...
最新文章
- 斯坦福马腾宇:用显式正则器提升深度神经网络的泛化能力
- Spring Ioc源码分析 之 Bean的加载(6):属性填充(populateBean())
- 计算机创建快捷方式w10,win10无法创建快捷方式,win10发送快捷方式磁盘满了
- C# GDI+ 实现图片分隔
- STM32/M3/M0关于开关总中断的问题
- linux运维需要掌握的基础知识
- 打造网红内容和资本哪个更重要
- 【翻译】MobileWeb开发的性能调优技巧
- 程序员的需要掌握的数学知识
- Oracle数据库的数据类型
- html都是纯文本文件吗,关于“什么是纯文本文件”的思考
- itil v4和v3的区别_ITIL从v3到v4 - 这是新的ITIL
- 使用matlab进行简单图像处理
- 实验十OSPF路由聚合
- 国际冠码与国际电话区号
- android开发_ViewGroup(组视图)-- 五大布局
- python中的pip命令在cmd下用不了?
- Arcgis Server 发布服务报错Failed to start the server machine ‘XXX‘. Error while starting AppServer. Requir
- .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock
- 互联网时代的“跨界打击”有多厉害?最怕大势将至,你却浑然不知