pg_rman在恢复服务器上恢复源库的备份

2024-03-30 23:20

本文主要是介绍pg_rman在恢复服务器上恢复源库的备份,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 说明
  • 恢复笔记
      • 待恢复的数据库文件所在目录与文件层级如下
      • 检查事项
      • 具体操作
    • 修改3: mv recovery.conf recovery.done
    • 需要重置 wal 日志然后启库
    • 检查效果
  • 补充笔记(2024-02-07更新)

pg_rman 安装与使用参考:
pg_rman 编译安装与使用

说明

  • 需求是能启库就行, 可以接受数据丢失, 恢复步骤有偷懒, 本文仅供个人记录笔记使用, 请不要完全照抄
  • 规范合理的步骤是需要使用 recovery.conf 文件, 写清楚目标环境上的归档日志路径(当前提前得将源库中的wal日志拷贝到目标环境归档路径下) 来启动并恢复

恢复笔记

以 db_test 为例:

待恢复的数据库文件所在目录与文件层级如下

/data/restore/pg_restore/backups/db_test20231216/014025/backup.ini

检查事项

0.目录级别与生产环境保持一致,如果不一致, 需要自己手动创建确保一致,
1.最上级目录(20231216同级目录)存在 pg_rman.ini
2.20231216/014025下存在 file_database.txt
3.文件 20231216/014025/backup.ini 中的 STATUS=OK

	-bash-4.2$ cat backup.ini# configurationBACKUP_MODE=FULLWITH_SERVERLOG=falseCOMPRESS_DATA=true# resultTIMELINEID=5START_LSN=4bb/4e000028STOP_LSN=4bb/7e81c420START_TIME='2023-02-15 01:35:03'END_TIME='2023-02-15 07:42:53'RECOVERY_XID=181372900RECOVERY_TIME='2023-02-15 06:04:45'TOTAL_DATA_BYTES=233395485133READ_DATA_BYTES=233408059346READ_ARCLOG_BYTES=32782681011WRITE_BYTES=35758753390BLOCK_SIZE=8192XLOG_BLOCK_SIZE=8192STATUS=OK

具体操作

  • 创建恢复目录(你要将 数据库备份集恢复到哪里去), 相当于是执行了 pg_rman -B $BACKUP_PATH init
mkdir -p   /data/restore/2023_pg_restore/db_test/data
  • 检查待恢复的数据库文件集合是否正常, 如果显示 OK 则可以继续操作, 如果显示 RUNNING或者ERROR 则说明备份文件集合有问题, 需要重新弄一份新的
    pg_rman -B /data/restore/pg_restore/backups/db_test show

  • 具体恢复命令 (-D 指向你要将数据库文件集合恢复到哪里去)
    pg_rman -B /data/restore/pg_restore/backups/db_test restore -D /data/restore/2023_pg_restore/db_test/data
    这里如果报 ARC_PATH 相关的错误(ERROR), 需要手动创建该目录 ,如果只是报 warning 可以先忽略
    比如:
    mkdir -p /data/restore/2023_pg_restore/db_test/arc_log
    mkdir -p /data/restore/2023_pg_restore/db_test/srv_log
    更新 /data/restore/pg_restore/backups/db_test/pg_rman.ini 文件

  • 修改 配置文件 /data/restore/2023_pg_restore/db_test/data/postgresql.conf 与 /data/restore/2023_pg_restore/db_test/data/backup_label(如果存在的话)
    修改1: 禁用 archive_mode
    修改2: 修改 log_directory 与 data_directory 与 hba_file 配置项中的 data 值 与 /data/restore/2023_pg_restore/db_test/data 保持一致

修改3: mv recovery.conf recovery.done

修改4: mv backup_label backup_label_lxm
修改5: 将 listen_addresses= ‘10.33.45.110’ 改为 listen_addresses = ‘*’

  • 手动启动数据库 (-D 启动哪个目录对应的数据库实例 )
    pg_ctl start -D /data/restore/2023_pg_restore/db_test/data

如果还报错, 查看日志文件

-bash-4.2$ tailf /data/restore/2023_pg_restore/db_test/data/pg_log/postgresql-25.*csv
2023-12-25 15:44:37.909 HKT,,,119321,,658932e5.1d219,4,,2023-12-25 15:44:37 HKT,,0,FATAL,XX000,"could not locate required checkpoint record",,"If you are not restoring from a backup, try removing the file ""/data/restore/2023_pg_restore/db_test/data/backup_label"".",,,,,,,""
2023-12-25 15:44:37.910 HKT,,,119317,,658932e5.1d215,1,,2023-12-25 15:44:37 HKT,,0,LOG,00000,"startup process (PID 119321) exited with exit code 1",,,,,,,,,""
2023-12-25 15:44:37.910 HKT,,,119317,,658932e5.1d215,2,,2023-12-25 15:44:37 HKT,,0,LOG,00000,"aborting startup due to startup process failure",,,,,,,,,""
2023-12-25 15:49:10.374 HKT,,,136964,,658933f6.21704,1,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"database system was interrupted; last known up at 2023-12-16 02:17:39 HKT",,,,,,,,,""
2023-12-25 15:49:10.375 HKT,,,136964,,658933f6.21704,2,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"could not open tablespace directory ""pg_tblspc/0/PG_9.4_201409291"": No such file or directory",,,,,,,,,""
2023-12-25 15:49:10.459 HKT,,,136964,,658933f6.21704,3,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"invalid primary checkpoint record",,,,,,,,,""
2023-12-25 15:49:10.459 HKT,,,136964,,658933f6.21704,4,,2023-12-25 15:49:10 HKT,,0,LOG,00000,"invalid secondary checkpoint record",,,,,,,,,""FATAL,XX000,"could not locate required checkpoint record",

需要重置 wal 日志然后启库

Report bugs to <pgsql-bugs@postgresql.org>.
-bash-4.2$ pg_resetxlog -f /data/restore/2023_pg_restore/db_test/data
Transaction log reset
-bash-4.2$ 
-bash-4.2$  pg_ctl start -D /data/restore/2023_pg_restore/db_test/data
server starting
-bash-4.2$ 2023-12-25 15:50:13 HKT::@:[138504]: LOG:  redirecting log output to logging collector process
2023-12-25 15:50:13 HKT::@:[138504]: HINT:  Future log output will appear in directory "/data/restore/2023_pg_restore/db_test/data/pg_log".

检查效果

-bash-4.2$ netstat -anp |grep 5472
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5472            0.0.0.0:*               LISTEN      138504/postgres     
tcp6       0      0 :::5472                 ::: *                    LISTEN      138504/postgres     
unix  2      [ ACC ]     STREAM     LISTENING     2208435216 138504/postgres      /tmp/.s.PGSQL.5472
unix  3      [ ]         STREAM     CONNECTED     154721   -                    
unix  3      [ ]         STREAM     CONNECTED     154720   -  -bash-4.2$ psql -p 5472
psql (9.4.14)
Type "help" for help.postgres=# \l+List of databasesName    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description                 
-----------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------db_test   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 69 GB   | pg_default | repmgr    | repmgr   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 687 MB  | pg_default | template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 6729 kB | pg_default | unmodifiable empty database|          |          |             |             | postgres=CTc/postgres |         |            | template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 8697 kB | pg_default | default template for new databases|          |          |             |             | postgres=CTc/postgres |         |            | 

补充笔记(2024-02-07更新)

1. 修改 /postgresql/hq/bk/restore/pg_restore/backups/iobs/pg_rman.ini 
将 ARCLOG_PATH 值改为一个新路径, 例如/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_arc_log, 需要先手动创建该路径并授予 postgres的属主权限2. 执行 pg_rman -B /postgresql/hq/bk/restore/pg_restore/backups/iobs/ restore -D /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2 >> ./res.log 2>&1 &
进行恢复3. 检查恢复结果
tail res.log
-bash-4.2$ tail res.log 
LOG: (16485/16492) 00000009000010B800000014
LOG: (16486/16492) 00000009000010B800000015
LOG: (16487/16492) 00000009000010B800000016
LOG: (16488/16492) 00000009000010B800000017
LOG: (16489/16492) 00000009000010B800000018
LOG: (16490/16492) 00000009000010B800000019
LOG: (16491/16492) 00000009000010B80000001A
LOG: (16492/16492) 00000009000010B80000001B
LOG: backup 2024-02-24 01:35:25 is valid
INFO: restore complete. Recovery starts automatically when the PostgreSQL server is started.4.进入新的 data目录cd /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2cp postgresql.conf postgresql.conf_bak_`date +%F`cp recovery.conf recovery.conf_bak_`date +%F`vim recovery.conf 
将 recovery_target_timeline 值改为 'latest'vim postgresql.conf 修改里面的相关路径
包括如下配置
-bash-4.2$ diff postgresql.conf postgresql.conf_bak_20240311 
2,3c2,3
< data_directory				    ='/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2'
< hba_file					    ='/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2/pg_hba.conf'
---
> data_directory				    ='/postgresql/pg5472/data'
> hba_file					    ='/postgresql/pg5472/data/pg_hba.conf'
7c7
< listen_addresses				   = '*'
---
> listen_addresses				   = '10.33.45.110'
57,58c57,58
< #archive_command = 'test ! -f /postgresql/pgbackup/iobs/archlog/%f && cp %p /postgresql/pgbackup/iobs/archlog/%f'
< archive_command = 'test ! -f /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_arc_log/%f && cp %p /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_arc_log/%f'
---
> archive_command = 'test ! -f /postgresql/pgbackup/iobs/archlog/%f && cp %p /postgresql/pgbackup/iobs/archlog/%f'
> 
67c67
< log_directory = '/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2/pg_log'
---
> log_directory = '/postgresql/pg5472/data/pg_log'
-bash-4.2$5. 启动数据库
postmaster -D /postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2 &6. 登录(根据配置文件中 listen_port 为 5472
-bash-4.2$ psql -p 5472
psql (9.4.14)
Type "help" for help.postgres=# show data_directory ;data_directory                   
---------------------------------------------------/postgresql/hq/bk/restore/2023_pg_restore/iobs_new_lxm2
(1 row)

这篇关于pg_rman在恢复服务器上恢复源库的备份的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/862852

相关文章

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my