打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PG_备份还原系列之pg_rman
前言
安装
前期准备
创建备份和归档目录
修改PG归档配置
初始化
设置备份策略
全库备份策略
增量备份策略
还原操作
后续操作
操作指令大全
exitcode
概念和配置参数
FAQ
前言
PG_RMAN是Postgresql的一款插件,用于备份和还原PostgreSQL数据库;它需要对整个数据库集群,存档WAL和服务器日志进行物理在线备份。
pg_rman支持使用PostgreSQL 9.0之后从备用站点获取备份,还支持存储快照备份。
pg_rman具有以下功能:
仅使用一个命令即可对整个数据库(包括表空间)进行备份。
只需一个命令即可从备份中恢复。
支持增量备份和备份文件压缩,以便占用更少的磁盘空间。
管理备份版本并显示备份目录。
支持存储快照。
pg_rman支持以下命令:
init --初始化备份目录。
backup --进行在线备份。
restore --还原。
show --显示备份历史记录。详细信息选项显示每个备份的附加信息。
validate --验证备份文件。未经验证的备份不能用于还原和增量备份。
delete --删除备份文件。
purge --从备份目录中删除已删除的备份。
安装
可以从以下链接下载对应版本的pg_rman;
https://github.com/ossc-db/pg_rman/releases
安装方法1:
--从源码编译安装,缺包编译报错需要下载对应包任何重试$ cd pg_rman$ make$ make install--将生成的pg_rman拷贝到/opt/pgsql/12/bin、/usr/bin
安装方法2:
--RPM包安装# rpm -ivh pg_rman-x.x.xx-x.pgxx.rhelx.x86_64.rpm--默认生成在/usr/pgxxx下面--将生成的pg_rman拷贝到/opt/pgsql/12/bin、/usr/bin前期准备
创建备份和归档目录
备份和归档的目录需要单独挂盘,不能跟数据目录放一起,因为会影响在线系统IO,推荐挂NFS远程盘进行远程备份。
--创建备份目录mkdir /pg_basebackup--创建wal归档目录mkdir /pg_arch--配置环境变量echo 'export BACKUP_PATH=/pg_basebackup'>>~/.bash_profileecho 'export ARCLOG_PATH=/pg_arch'>>~/.bash_profile修改PG归档配置
为了对归档进行保存,修改归档相关配置
--在$PGDATA目录下创建arch.sh,保留30天归档test ! -f /pg_arch/$1 && cp --preserve=timestamp $2 /pg_arch/$1 ; find /pg_arch/ -type -f mtime 30 -exec rm -f {} \;--修改postgresql.conf配置archive_mode=on #开启归档archive_command= 'arch.sh %f %p' #shell脚本archive_timeout=900 #强制wal日志切换时间--重启PG
pgrestart初始化
--初始化PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v init--修改/pg_basebackup/pg_rman.ini配置文件,配置备份、归档保存天数ARCLOG_PATH='/pg_arch'SRVLOG_PATH='/pgsql/12/data/pg_log'#配置压缩参数COMPRESS_DATA=YES#归档日志保留天数KEEP_ARCLOG_DAYS=14#KEEP_ARCLOG_FILES=1000 --归档保留个数#备份保留天数KEEP_DATA_DAYS=30设置备份策略
全库备份策略
整个数据库备份和存档备份
--可以配置到crontab中每周日晚上执行一次0 1 * * 0 root sh fullback.sh--脚本fullback.sh,备份完必须执行validate,否则备份不能用于还原PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v -b full backupPGPASSWORD=XXX $PGHOME/bin/pg_rman -B /pg_basebackup validate增量备份策略
增量备份和存档备份
--可以配置到crontab中每周日晚上执行一次0 23 * * * root sh inrback.sh--脚本inrback.shPGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v -b incremental backupPGPASSWORD=XXX $PGHOME/bin/pg_rman -B /pg_basebackup validate--查看备份情况pg_rman -a show$ pg_rman show===================================================================== StartTime EndTime Mode Size TLI Status=====================================================================2015-07-30 13:31:08 2015-07-30 13:31:10 FULL 14MB 15 OK2015-07-30 13:30:37 2015-07-30 13:30:38 ARCH 53kB 15 OK2015-07-30 13:30:32 2015-07-30 13:30:33 ARCH 26kB 15 OK2015-07-30 13:30:11 2015-07-30 13:30:13 FULL 14MB 15 OK2015-07-30 13:28:10 2015-07-30 13:28:11 INCR 120kB 14 OK2015-07-30 13:27:45 2015-07-30 13:27:46 INCR 54kB 14 OK2015-07-30 13:27:32 2015-07-30 13:27:33 INCR 54kB 14 OK2015-07-30 13:27:25 2015-07-30 13:27:26 INCR 54kB 14 OK2015-07-30 13:24:02 2015-07-30 13:24:04 FULL 14MB 14 OK还原操作
任何数据库恢复操作,操作前都需要对原$PGDATA目录进行备份;
--确认实例已经停掉pgstop--备份cp -r $PGDATA /pgsql/12/data_bakmkdir -p /pg_arch/arch_bakcp -r /pg_arch/* /pg_arch/arch_bak--还原到指定时间点or最新PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v restore --recovery-target-time '2020-12-02 03:04:54'PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v restore --recovery-target-timeline 'latest'后续操作
--修改权限chmod 700 $PGDATAchown -R postgres:postgres $PGDATA--启动PGpgstart--启动完后注释掉postgres.conf最后还原配置#restore_command='xxx'#recovery-target-timeline='xxx'--确认没问题后干掉arch的备份目录,不删除会导致下次整库备份报错rm -rf /pg_arch/arch_bak--找时间重新做一份整库备份操作指令大全
1、初始化指令PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P init2、全库备份指令(用于还原需要在执行验证指令)PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v -b full backup3、增量备份策略(用于还原需要在执行验证指令)PGPASSWORD=XXX $PGHOME/bin/pg_rman -D $PGDATA -B /pg_basebackup -A /pg_arch -P -v -b incremental backup4、standby节点全库备份pg_rman backup -D /home/postgres/pgdata_sby(备节点) -b full --host=masterIP --standby-host=standbyIP --standby-port=54325、验证备份文件。未经验证的备份不能用于还原和增量备份。PGPASSWORD=XXX $PGHOME/bin/pg_rman -B /pg_basebackup validate6、备份查看指令$PGHOME/bin/pg_rman -a show7、备份删除指令pg_rman delete 2020-11-30 13:30:308、删除已删除的备份,尽管该delete命令从文件系统中删除了实际数据,但是仍然保留一些已删除备份的目录信息pg_rman purgeexitcode
Code
Name
Description
0
SUCCESS
Succeeded.
1
HELP
Print a help, then exit.
2
ERROR
Generic error.
3
FATAL
Exit because of repeated errors
4
PANIC
Unknown critical condition.
10
ERROR_SYSTEM
I/O or system error.
11
ERROR_NOMEM
Out of memory.
12
ERROR_ARGS
Invalid input parameters.
13
ERROR_INTERRUPTED
Interrupted by user. (Ctrl C etc.)
14
ERROR_PG_COMMAND
SQL error.
15
ERROR_PG_CONNECT
Cannot connect to PostgreSQL server.
20
ERROR_ARCHIVE_FAILED
Cannot archive WAL files.
21
ERROR_NO_BACKUP
Backup file not found.
22
ERROR_CORRUPTED
Backup file is broken.
23
ERROR_ALREADY_RUNNING
Cannot start because another pg_rman is running.
24
ERROR_PG_INCOMPATIBLE
Version conflicted with PostgreSQL server.
25
ERROR_PG_RUNNING
Cannot restore because PostgreSQL server is running.
26
ERROR_PID_BROKEN
postmaster.pid file is broken.
概念和配置参数
时间线:
参考下面链接文章
http://mysql.taobao.org/monthly/2015/07/03/
归档恢复设置restore_command:用于获取一个已归档段的XLOG日志文件的命令archive_cleanup_command:清除不在需要的XLOG日志文件的命令recovery_end_command:归档恢复结束后执行的命令恢复目标设置(默认情况下,数据库将会一直恢复到 WAL 日志的末尾)recovery_target = ’immediate’:在从一个在线备 份中恢复时,这意味着备份结束的那个点recovery_target_name (string):这个参数指定(pg_create_restore_point()所创建)的已命名的恢复点,将恢复到该恢复点recovery_target_time (timestamp):这个参数指定恢复到的时间戳recovery_target_xid (string):这个参数指定恢复到的事务 IDrecovery_target_inclusive (boolean):指定是否在指定的恢复目标之后停止(true),或者在恢复目标之前停止 (false);适用于recovery_target_time或者recovery_target_xid被指定的情况;这个设置分别控制事务是否有准确的目标提交时间或 ID 是否将被包括在该恢复中;默认值为 truerecovery_target_timeline (string):指定恢复到一个特定的时间线recovery_target_action (enum):指定在达到恢复目标时服务器应该立刻采取的动作,包括pause(暂停)、promote(接受连接)、shutdown(停止服务器),其中pause为默认动作备库参数设置standby_mode(boolean):为on表示作为一个备库,否则不为备库primary_conninfo (string):指定备库连接主库的连接字符串primary_slot_name (string):通过流复制指定主库的一个复制槽来复制主库数据,如果没有设置primary_conninfo,则此参数无效trigger_file (string):指定一个触发器文件,该文件存在可以结束备库的恢复,即升级备库为一个独立的主库recovery_min_apply_delay (integer):这个参数允许将恢复延迟一段固定的时间,如果没有指定单位则以毫秒为单位。如果recovery.conf中同时指定了recoveryTargetXid、recoveryTargetName、recoveryTargetTime时,PostgreSQL会按照RECOVERY_TARGET_XID> RECOVERY_TARGET_NAME > RECOVERY_TARGET_TIME的优先级来获取最终的目标恢复位点。如果在recovery.conf指定recovery_targetTimeLine为latest,则可以基于当前TimeLineID为起点寻找最新时间线:寻找当前TimeLineID的时间线历史文件“XXX.history”,如果存在则继续寻找,否则错误退出TimeLineID是线性增长的,将当前TimeLineID自增1寻找是否存在时间线历史文件,直到不存在对应的时间线历史文件为止,即可找到最新的时间线。FAQ
1. 还原启动时报错,“invalid checkpoint record”  查看backup_label文件,发现WAL检查点所在归档文件是存在的,在postgresql.conf中restore_command是一个cp指令,试试该指令,发现报错权限不足,将路径下目录赋予权限后,正常启动。2. full backup时报错,归档文件不存在  pg_rman备份指令加-v 显示详细信息,发现是/pg_arch/bak报错,bak目录是之前还原时归档的备份,删除后full backup正常。3.还原到指定时间点后,数据库处于只读状态  pg还原到指定时间点默认动作recovery_target_action='pause',暂停;此时可以用超户执行select pg_wal_replay_resume(); 或者在启动数据库实例前在postgresql.conf中添加recovery_target_action='promote'
参考文献:
http://ossc-db.github.io/pg_rman/index.html
来源:https://www.icode9.com/content-4-774151.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PostgreSQL的pg_basebackup备份恢复详解
PostgreSQL基于时间点恢复(PITR)
PostgreSQL的HA(主备切换)
美创科技运维日记|postgresql-pg简易异步流复制搭建
RMAN备份策略与异机恢复一例
RMAN备份文件找回
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服