admin 发表于 2023-8-28 14:08:55

PolarDB for PostgreSQL备份恢复原理及数据目录结构

PolarDB for PostgreSQL 采用基于共享存储的存算分离架构,其备份恢复和 PostgreSQL 存在部分差异。
备份恢复原理PostgreSQL 的备份流程可以总结为以下几步:进入备份模式强制进入 Full Page Write 模式,并切换当前的 WAL segment 文件在数据目录下创建 backup_label 文件,其中包含基础备份的起始点位置备份的恢复必须从一个内存数据与磁盘数据一致的检查点开始,所以将等待下一次检查点的到来,或立刻强制进行一次 CHECKPOINT备份数据库:使用文件系统级别的工具进行备份退出备份模式重置 Full Page Write 模式,并切换到下一个 WAL segment 文件创建备份历史文件,包含当前基础备份的起止 WAL 位置,并删除 backup_label 文件备份 PostgreSQL 数据库最简便方法是使用 pg_basebackup 工具。
数据目录结构PolarDB for PostgreSQL 采用基于共享存储的存算分离架构,其数据目录分为以下两类:本地数据目录:位于每个计算节点的本地存储上,为每个计算节点私有共享数据目录:位于共享存储上,被所有计算节点共享http://www.cuug.com.cn/uploadfile/2023-08/34892276744.jpg由于本地数据目录中的目录和文件不涉及数据库的核心数据,因此在备份数据库时,备份本地数据目录是可选的。可以仅备份共享存储上的数据目录,然后使用 initdb 重新生成新的本地存储目录。但是计算节点的本地配置文件需要被手动备份,如 postgresql.conf、pg_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.pid21 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 baseDir 1 7424 Wed Jan 11 09:34:02 2023 globalDir 1 0 Wed Jan 11 09:34:02 2023 pg_tblspcDir 1 512 Wed Jan 11 09:35:05 2023 pg_walDir 1 384 Wed Jan 11 09:35:01 2023 pg_logindexDir 1 0 Wed Jan 11 09:34:02 2023 pg_twophaseDir 1 128 Wed Jan 11 09:34:02 2023 pg_xactDir 1 0 Wed Jan 11 09:34:02 2023 pg_commit_tsDir 1 256 Wed Jan 11 09:34:03 2023 pg_multixactDir 1 0 Wed Jan 11 09:34:03 2023 pg_csnlogDir 1 256 Wed Jan 11 09:34:03 2023 polar_dmaDir 1 512 Wed Jan 11 09:35:09 2023 polar_fullpageFile 1 32 Wed Jan 11 09:35:00 2023 RWIDDir 1 256 Wed Jan 11 10:25:42 2023 pg_replslotFile 1 224 Wed Jan 11 10:19:37 2023 polar_non_exclusive_backup_labeltotal 16384 (unit: 512Bytes)
页: [1]
查看完整版本: PolarDB for PostgreSQL备份恢复原理及数据目录结构