温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

物理备份和在线备份工具pg_rman使用详解(九)

发布时间:2020-06-15 18:12:03 来源:网络 阅读:2870 作者:IdealReality 栏目:数据库

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 --progress INFO: copying database files Processed 1298 of 1298 files, skipped 0 INFO: copying archived WAL files Processed 3 of 3 files, skipped 0 INFO: copying server log files INFO: backup complete INFO: Please execute 'pg_rman validate' to verify the files are correctly copied.
    • pg_rman 校验备份集
      pg_rman 的备份必须都是经过验证过的,否则不能进行恢复和增量备份。 $ pg_rman validate INFO: validate: "2018-10-14 14:55:34" backup, archive log files and server log files by CRC INFO: backup "2018-10-14 14:55:34" is valid
  • pg_rman 列出备份集

    $ pg_rman show

    物理备份和在线备份工具pg_rman使用详解(九)

     $ 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使用详解(九)

 $ 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删除备份集

     $ 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

    物理备份和在线备份工具pg_rman使用详解(九)

 $ mv data data-bak # 将之间的目录作为备份。 $ mkdir data # 创建数据目录。 $ chmod 700 ./data
  • 使用pg_rman restore还原:

     $ pg_rman restore

    物理备份和在线备份工具pg_rman使用详解(九)

     $ cd $PGDATA $ ls -l

    物理备份和在线备份工具pg_rman使用详解(九)

 $ 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

物理备份和在线备份工具pg_rman使用详解(九)

  • 还原时,注意事项:

     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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI