物理备份和在线备份工具pg_rman使用详解(九)
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,pg_rman工具是实现PostgreSQL数据库在线备份,物理备份和恢复的备份工具。可以实现全量备份,增量备份。全量: full增量: incremental归档: archiveUsage: p
千家信息网最后更新 2025年02月02日物理备份和在线备份工具pg_rman使用详解(九)
pg_rman工具是实现PostgreSQL数据库在线备份,物理备份和恢复的备份工具。可以实现全量备份,增量备份。
全量: full
增量: incremental
归档: archive
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 pg_rman OPTION purge
命令选项: -D, --pgdata=PATH 数据存储目录的路径 -A, --arclog-path=PATH 归档wal (预写)日志的路径 -S, --srvlog-path=PATH 数据库服务器存储日志的路径。 -B, --backup-path=PATH 备份数据存储的路径。 -c, --check 检查 -v, --verbose 显示详细消息 -P, --progress 显示已处理文件的进度备份选项: -b, --backup-mode=MODE 全备,增备,归档 -s, --with-serverlog 备份服务器日志文件 -Z, --compress-data 使用zlib压缩数据备份 -C, --smooth-checkpoint 在备份前做平滑检查点 -F, --full-backup-on-error 切换到完全备份模式,注意:此选项仅用于--backup-mode = incremental或archive --keep-data-generations=NUM 保留NUM代完整数据备份 --keep-data-days=NUM 保持足够的数据备份以恢复到N天前 --keep-arclog-files=NUM 保留NUM个归档的WAL日志 --keep-arclog-days=DAY 保持存档的WAL在DAY天内修改 --keep-srvlog-files=NUM 保留NUM个服务器日志 --keep-srvlog-days=DAY 在DAY天内修改服务器日志 --standby-host=HOSTNAME 从待机状态进行备份时备用主机 --standby-port=PORT 从待机状态进行备份时的备用端口还原选项: --recovery-target-time 恢复将继续进行的时间戳 --recovery-target-xid 事务ID,恢复将继续进行 --recovery-target-inclusive 我们是否在恢复目标之后停止 --recovery-target-timeline 恢复到特定的时间 --hard-copy 复制archivelog而不是符号链接目录选项: -a 显示已删除的备份删除选项: -f 强制删除比规定日期更旧的备份连接选项: -d, --dbname=DBNAME 连接指定库 -h, --host=HOSTNAME 数据库主机名/IP地址 -p, --port=PORT 数据库端口 -U, --username=USERNAME 数据库用户名 -w, --no-password 从不提示密码 -W, --password 强制密码提示通用选项: -q, --quiet 不显示任何INFO或者DEBUG信息。 --debug 查看debug信息。
开始使用pg_rman工具:
创建备份目录
# mkdir /database-backup/postgresql-backup/{fullbackup,walbackup,pg_srvlog} -p # chown -R postgres.postgres /database-backup/postgresql-backup/
- 设置环境变量:
$ vim .profile export BACKUP_PATH=/database-backup/postgresql-backup/fullbackup export ARCLOG_PATH=/database-backup/postgresql-backup/walbackup export SRVLOG_PATH=/database-backup/postgresql-backup/pg_srvlog $ source .profile #立即生效
- 修改postgresql.conf配置文件:
$ vim data/postgresql.conf archive_mode = on archive_command = 'DATE=`date +%Y%m%d`; DIR="/database-backup/postgresql-backup/walbackup/"; (test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f' 保存并退出。
- pg_rman init 初始化
$ pg_rman init INFO: ARCLOG_PATH is set to '/database-backup/postgresql-backup/walbackup' INFO: SRVLOG_PATH is set to '/database-backup/postgresql-backup/pg_srvlog'
- pg_rman全量备份
$ pg_rman backup --backup-mode=full --with-serverlog --progressINFO: copying database filesProcessed 1298 of 1298 files, skipped 0INFO: copying archived WAL filesProcessed 3 of 3 files, skipped 0INFO: copying server log filesINFO: backup completeINFO: Please execute 'pg_rman validate' to verify the files are correctly copied.
- pg_rman 校验备份集
pg_rman 的备份必须都是经过验证过的,否则不能进行恢复和增量备份。$ pg_rman validateINFO: validate: "2018-10-14 14:55:34" backup, archive log files and server log files by CRCINFO: backup "2018-10-14 14:55:34" is valid
pg_rman 列出备份集
$ pg_rman show
$ ls -l /database-backup/postgresql-backup/fullbackup/ total 20 drwx------ 3 postgres postgres 4096 Oct 14 14:55 20181014 drwx------ 4 postgres postgres 4096 Oct 14 14:53 backup -rw-rw-r-- 1 postgres postgres 119 Oct 14 14:53 pg_rman.ini -rw-rw-r-- 1 postgres postgres 40 Oct 14 14:53 system_identifier drwx------ 2 postgres postgres 4096 Oct 14 14:53 timeline_history
- pg_rman增量备份:
增量备份是基于文件系统的update time时间线. 增量备份必须有个对应的全库备份. $ pg_rman backup --backup-mode incremental --progress --compress-data
$ pg_rman validate INFO: validate: "2018-10-14 15:59:57" backup and archive log files by CRC INFO: backup "2018-10-14 15:59:57" is valid $ pg_rman show
pg_rman删除备份集
$ pg_rman delete -f '2018-10-14 15:59:57' INFO: delete the backup with start time: "2018-10-14 15:59:57" INFO: delete the backup with start time: "2018-10-14 14:55:34" 删除增量备份的同时,也已经把全量备份给删除了。 $ pg_rman show ===================================================================== StartTime EndTime Mode Size TLI Status =====================================================================
注意: 创建增量备份之前必须先创建一个全量备份。
- pg_rman restore 还原
模拟数据库误删除: $ /etc/init.d/postgresql stop $ ps -ef | grep -i postmaster | grep -v grep $cd data $ ls -l
$ mv data data-bak # 将之间的目录作为备份。 $ mkdir data # 创建数据目录。 $ chmod 700 ./data
使用pg_rman restore还原:
$ pg_rman restore
$ cd $PGDATA$ ls -l
$ cat recovery.conf # recovery.conf generated by pg_rman 1.3.7 restore_command = 'cp /database-backup/postgresql-backup/walbackup/%f %p' recovery_target_timeline = '1' 启动PostgreSQL数据库服务: $ /etc/init.d/postgresql start
$ ps -ef |grep -i postgres
还原时,注意事项:
restore后启动会遇到下列错误: invalid primary checkpoint record invalid secondary checkpoint record could not locate a valid checkpoint record 此时只能重置wal,并取消恢复模式 $ pg_resetwal --f $PGDATA $ mv $PGDATA/recovery.conf $PGDATA/recovery.done 使用pg_rman备份时对wal的归档是通过软链接来实现。建议添加 --hard-copy。
增量备份和全量备份, 备份还原已经完成。
需要注意的是:
物理备份时的全量和增量备份时可以在线备份(不停机备份).
但是还原时,需要停机进行还原。
postgres用户的环境变量配置文件内容: PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/services/install/postgresql10/bin/ export LD_LIBRARY_PATH=/services/install/postgresql10/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/services/install/python3.6/lib:$LD_LIBRARY_PATH export PGDATA PATH export BACKUP_PATH=/database-backup/postgresql-backup/fullbackup export ARCLOG_PATH=/database-backup/postgresql-backup/walbackup export SRVLOG_PATH=/database-backup/postgresql-backup/pg_srvlog
参考:
https://github.com/ossc-db/pg_rman/tree/master
http://ossc-db.github.io/pg_rman/index.html
备份
数据
增量
数据库
日志
文件
目录
服务
服务器
路径
工具
数据备份
时间
存储
物理
在线
主机
信息
变量
密码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器内存不同品牌可否兼容
软件开发项目规格说明
数据库中备份用什么技术实现
我的世界九月号的服务器
数据库更新索引
网络安全系统防护拓扑图
登服务器
maven管理微服务器
网络安全隔离设备正向反向
多用户数据库优缺点
鸿麟网络技术有限责任公司
宣城app软件开发费用
2021年党建网络安全
如何操作博库数据库平台
高效区块链网络技术研究
大学计算机数据库填空
mysql锁定数据库
ERIC数据库的全称
js 数据库密码安全
网络安全科普视频生活篇
数据库管理的变迁
网络安全可研性课题
阿里云服务器25端口
数据中心服务器生产厂商
超星数据库有下载次数限制吗
网络安全周测试题
数据库 云备份
数据库大于等于某一天
操作系统可以做多少个服务器
查服务器的内存命令