暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB PostgreSQL版的备份恢复(上)

PolarDB农夫山泉 2023-06-26
356

PolarDB PostgreSQL版(简称 PolarDB-PG)是一款阿里云自主研发的云原生关系型数据库产品,100% 兼容 PostgreSQL,高度兼容Oracle语法;采用基于 Shared-Storage 的存储计算分离架构,具有极致弹性、毫秒级延迟、HTAP 的能力和高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB 具有大规模并行计算能力,可以应对OLTP与OLAP混合负载。

PolarDB for PostgreSQL 采用基于共享存储的存算分离架构,其备份恢复和 PostgreSQL 存在部分差异。通过三部分介绍如何对PolarDB PostgreSQL版进行备份,并通过备份来搭建 Replica 节点或 Standby 节点,该篇为介绍的第一部分。

备份恢复原理

PostgreSQL 的备份流程可以总结为以下几步:

  1. 进入备份模式
    • 强制进入 Full Page Write 模式,并切换当前的 WAL segment 文件
    • 在数据目录下创建 backup_label 文件,其中包含基础备份的起始点位置
    • 备份的恢复必须从一个内存数据与磁盘数据一致的检查点开始,所以将等待下一次检查点的到来,或立刻强制进行一次 CHECKPOINT
  2. 备份数据库:使用文件系统级别的工具进行备份
  3. 退出备份模式
    • 重置 Full Page Write 模式,并切换到下一个 WAL segment 文件
    • 创建备份历史文件,包含当前基础备份的起止 WAL 位置,并删除 backup_label 文件

备份 PostgreSQL 数据库最简便方法是使用 pg_basebackup 工具。

数据目录结构

PolarDB for PostgreSQL 采用基于共享存储的存算分离架构,其数据目录分为以下两类:

  • 本地数据目录:位于每个计算节点的本地存储上,为每个计算节点私有
  • 共享数据目录:位于共享存储上,被所有计算节点共享

backup-dir

由于本地数据目录中的目录和文件不涉及数据库的核心数据,因此在备份数据库时,备份本地数据目录是可选的。可以仅备份共享存储上的数据目录,然后使用 initdb 重新生成新的本地存储目录。但是计算节点的本地配置文件需要被手动备份,如 postgresql.confpg_hba.conf 等文件。

本地数据目录

通过以下 SQL 命令可以查看节点的本地数据目录:

postgres=# SHOW data_directory;
     data_directory
------------------------
 /home/postgres/primary
(1 row)
复制

本地数据目录类似于 PostgreSQL 的数据目录,大多数目录和文件都是通过 initdb 生成的。随着数据库服务的运行,本地数据目录中会产生更多的本地文件,如临时文件、缓存文件、配置文件、日志文件等。其结构如下:

$ tree ./ -L 1
./
├── base
├── current_logfiles
├── global
├── pg_commit_ts
├── pg_csnlog
├── pg_dynshmem
├── pg_hba.conf
├── pg_ident.conf
├── pg_log
├── pg_logical
├── pg_logindex
├── pg_multixact
├── pg_notify
├── pg_replslot
├── pg_serial
├── pg_snapshots
├── pg_stat
├── pg_stat_tmp
├── pg_subtrans
├── pg_tblspc
├── PG_VERSION
├── pg_xact
├── polar_cache_trash
├── polar_dma.conf
├── polar_fullpage
├── polar_node_static.conf
├── polar_rel_size_cache
├── polar_shmem
├── polar_shmem_stat_file
├── postgresql.auto.conf
├── postgresql.conf
├── postmaster.opts
└── postmaster.pid

21 directories, 12 files
复制

共享数据目录

通过以下 SQL 命令可以查看所有计算节点在共享存储上的共享数据目录:

postgres=# SHOW polar_datadir;
     polar_datadir
-----------------------
 /nvme1n1/shared_data/
(1 row)
复制

共享数据目录中存放 PolarDB for PostgreSQL 的核心数据文件,如表文件、索引文件、WAL 日志、DMA、LogIndex、Flashback Log 等。这些文件被所有节点共享,因此必须被备份。其结构如下:

$ sudo pfs -C disk ls /nvme1n1/shared_data/
   Dir  1     512               Wed Jan 11 09:34:01 2023  base
   Dir  1     7424              Wed Jan 11 09:34:02 2023  global
   Dir  1     0                 Wed Jan 11 09:34:02 2023  pg_tblspc
   Dir  1     512               Wed Jan 11 09:35:05 2023  pg_wal
   Dir  1     384               Wed Jan 11 09:35:01 2023  pg_logindex
   Dir  1     0                 Wed Jan 11 09:34:02 2023  pg_twophase
   Dir  1     128               Wed Jan 11 09:34:02 2023  pg_xact
   Dir  1     0                 Wed Jan 11 09:34:02 2023  pg_commit_ts
   Dir  1     256               Wed Jan 11 09:34:03 2023  pg_multixact
   Dir  1     0                 Wed Jan 11 09:34:03 2023  pg_csnlog
   Dir  1     256               Wed Jan 11 09:34:03 2023  polar_dma
   Dir  1     512               Wed Jan 11 09:35:09 2023  polar_fullpage
  File  1     32                Wed Jan 11 09:35:00 2023  RWID
   Dir  1     256               Wed Jan 11 10:25:42 2023  pg_replslot
  File  1     224               Wed Jan 11 10:19:37 2023  polar_non_exclusive_backup_label
total 16384 (unit: 512Bytes)
复制

最后修改时间:2023-06-26 16:59:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论