计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
态势感知 SA
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive
文档首页/ 云数据库 RDS/ 用户指南/ RDS for PostgreSQL用户指南/ 数据恢复/ 通过全量备份文件恢复到自建PostgreSQL数据库

通过全量备份文件恢复到自建PostgreSQL数据库

更新时间:2024-09-05 GMT+08:00

本章节介绍将下载的华为云RDS for PostgreSQL全量备份文件恢复到自建PostgreSQL数据库的操作步骤。

如果您希望在本地重新建立一个同样体量PostgreSQL数据库,并且将华为云RDS for PostgreSQL数据全部迁移,可以使用本章节操作将下载的.tar.gz文件在本地进行重建。

操作流程

  1. 下载华为云RDS for PostgreSQL实例中对应时间点的全备文件。
  2. 将全备文件上传到本地用以重建数据库。
  3. 使用tar解压工具将全备文件解压。
  4. 保留自建数据库相关配置文件并通过os命令将解压的全备文件覆盖到自建数据库的data目录中。
  5. 重启数据库,等待数据库恢复完成。

约束限制

  • 本章节仅使用从华为云RDS for PostgreSQL所有版本实例下载的全量备份文件在本地恢复到对应版本自建数据库,不包括增量备份的恢复操作。
  • 自建PostgreSQL数据库内核小版本需与华为云RDS for PostgreSQL版本号一致。

    通过psql -Vpsql --version命令,可以查看PostgreSQL内核版本。

  • 仅支持恢复到本地为Linux操作系统的数据库,系统上需要安装tar解压工具。

    通过sudo yum install tar命令安装tar解压工具。

  • 在进行恢复阶段请勿在本地自建数据库运行其他业务或保留业务数据。
  • RDS for PostgreSQL有部分增强特性(如Failover Slot等),使用云上的物理备份恢复到开源自建数据库时执行部分SQL报错,需要将用到的增强特性删除,详见常见问题
  • 本地自建数据库的操作系统与云数据库的操作系统可能不一致,而PostgreSQL数据库部分索引的排序规则依赖操作系统,恢复到自建数据库后需要重建索引,需要重建的索引排查方法见官方文档

步骤一:在华为云RDS for PostgreSQL下载全量备份文件

RDS for PostgreSQL实例会在固定时间进行自动全备任务,也可以由您指定时间进行手动全备任务,其生成的.tar.gz文件支持下载以及在本地进行恢复自建数据库。

  1. 您可以在RDS界面单击实例名称,选择“备份恢复 > 全量备份 > 下载”,详见下载全量备份文件
  2. 通过文件传输工具(例如WinSCP)将全备文件上传到本地PostgreSQL库所在的Linux设备。

步骤二:使用备份文件恢复数据到自建PostgreSQL

使用说明

以下步骤请根据实际情况修改:

  1. RDS for PostgreSQL备份文件解压前后建议存放在不同目录下。
    • 解压前文件:/home/postgres/全备文件.tar.gz
    • 解压后目录:/home/postgres/backuprds
  2. “/home/postgres/backuplocal”目录存放本地PostgreSQL数据库“data”目录下的两个配置文件“postgresql.conf”和“pg_hba.conf”。
  3. 使用postgres用户作为本地PostgreSQL数据库的安装用户。
  4. 使用$PGDATA代替本地PostgreSQL数据库“data”目录,执行以下命令获取本地PostgreSQL数据库“data”目录。

    su - postgres

    psql --host=localhost --port=<DB_PORT> --dbname=postgres --username=postgres -c "show data_directory;"

    DB_PORT为本地自建数据库实例的端口,默认值为5432,请以实际配置为准。

操作步骤

  1. 切换至postgres用户并创建一个临时目录“backuprds”,以下所有步骤使用postgres用户执行。

    su - postgres

    mkdir /home/postgres/backuprds

  2. 停止本地PostgreSQL数据库服务。

    pg_ctl stop -D $PGDATA

  3. 创建临时目录保存本地PostgreSQL数据库data目录下的两个配置文件(“postgresql.conf”、“pg_hba.conf”)。

    mkdir /home/postgres/backuplocal

    cp $PGDATA/pg_hba.conf $PGDATA/postgresql.conf /home/postgres/backuplocal

  4. 清空本地数据库的“data”目录。
    须知:

    操作前请确保“$PGDATA/”目录下的数据已经不再需要,请谨慎操作。

    执行ls -l $PGDATA查看“$PGDATA/”目录下的文件。

    rm -rf $PGDATA/*

  5. 执行如下命令,将备份解压到1中准备的目录。
    说明:

    若使用root用户上传RDS for PostgreSQL备份文件到“/home/postgres/全备文件.tar.gz”,该文件会存在权限问题,需要修改该文件属主。

    1. 执行sudo su切换至root用户。
    2. 执行chown -R postgres:postgres /home/postgres/全备文件.tar.gz修改该文件属主为postgres用户。
    3. 执行su - postgres切换回postgres用户。

    tar -zxf /home/postgres/全备文件.tar.gz -C /home/postgres/backuprds

    解压后会在“/home/postgres/backuprds”目录下产生以下目录:

    • 一个“base”目录,存放全量文件。
    • 一个“pg_wal”目录,为增量文件目录。如果PostgreSQL版本为9.x,则为“pg_xlog”目录。
    • N个以数字命名的表空间目录(如果原备份存在表空间文件)。
  6. 53中的文件按顺序拷贝到本地数据库指定目录下。
    1. 将解压出来的“base”目录下的文件,全部拷贝到本地数据库“data”目录,然后用3中保存的配置文件,覆盖本地数据库“data”目录下的两个文件。

      cp -r /home/postgres/backuprds/base/* $PGDATA

      cp -r /home/postgres/backuplocal/* $PGDATA

    2. 将解压出来的“pg_wal”目录(如果PostgreSQL版本为9.x,则为“pg_xlog”目录)下的文件,拷贝到本地数据库“data”下的“pg_wal”目录(如果PostgreSQL版本为9.x,则为“pg_xlog”目录)。

      cp -r /home/postgres/backuprds/pg_wal/* $PGDATA/pg_wal

    3. (可选)如果原备份存在表空间文件,修改“data/tablespace_map”文件中对应的表空间软链接信息:
      • 复制表空间文件到“/tmp/tblspc/”目录下。

        若解压文件中存在多个表空间目录,请多次执行cp -r /home/postgres/backuprds/$table_space /tmp/tblspc命令,确保所有表空间复制到“/tmp/tblspc”目录。

        mkdir /tmp/tblspc

        cp -r /home/postgres/backuprds/$table_space /tmp/tblspc

        $table_space为5中解压出的以数字命名的表空间名称。

      • 删除本地数据库“data”目录“/tablespace_map”文件。

        rm -rf $PGDATA/tablespace_map

      • 添加本地数据库“data”目录“/tablespace_map”文件的配置信息,若解压文件中存在多个表空间目录请多次执行以下命令,确保表空间软链接信息配置完整。

        echo "$table_space /tmp/tblspc/$table_space" >> $PGDATA/tablespace_map

  7. 重新启动数据库,等待数据库恢复完成。

    pg_ctl start -D $PGDATA

    说明:

    如果备份期间云数据库有较大的写业务,“pg_wal”目录下会有较多的WAL日志,数据库启动时回放WAL的时间可能较长,启动命令可能会超时失败。

    执行ps uxwwf | grep 'startup'命令查看startup进程的状态来判断当前恢复的进度。

常见问题

恢复数据

Q:如果没有备份该如何恢复数据?

A:通过DRS迁移数据,详见将PostgreSQL同步到PostgreSQL

备份恢复操作

  • Q1:使用云数据库备份文件恢复自建数据库,数据库启动失败,报错信息“replication slot file xxx has corrupted length xxx”,如何处理?

    A:手动删除“pg_replslot”目录下的所有文件和文件夹,删除完成后启动数据库。

  • Q2:常见报错“could not locate a valid checkpoint record”的原因,以及如何处理?

    A:该错误通常表示数据库中的检查点记录已损坏或丢失,导致无法恢复数据库。一般情况下是wal日志没有被正常加载,建议参考6.b中的处理重新执行该命令。

RDS for PostgreSQL11版本恢复数据

  • Q1:RDS for PostgreSQL 11恢复到本地PostgreSQL 11时int4到text的类型转换时出现报错信息 “ERROR: internal function "int4_text" is not in internal lookup table”时,如何处理?

    A:使用postgres用户连接本地PostgreSQL 11数据库执行如下命令删除该类型转换规则,需要super user执行。

    delete from pg_cast where castsource = 'int4'::regtype and casttarget = 'text':: regtype;

  • Q2:RDS for PostgreSQL 11恢复到本地PostgreSQL 11时多个类型转换函数报错,如何排查和处理?

    A:分别在本地PostgreSQL 11和RDS for PostgreSQL 11执行如下SQL,并对比结果。

    select oid, * from pg_cast order by 1;

    对于RDS for PostgreSQL 11新增的类型转换规则,在本地PostgreSQL 11执行如下SQL全部删除。

    delete from pg_cast where castsource = xxx and casttarget = xxx;

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容