pg_basebackup 备份和还原
文档下载链接(包含图文):
https://download.csdn.net/download/djinglan/90592237?spm=1011.2124.3001.6210
-
备份操作步骤
1. 确认 PostgreSQL 配置
- 确保 `postgresql.conf` 中 `wal_level` 设置为 `replica` 或更高
- 确保 `pg_hba.conf` 允许复制连接
2. 创建备份目录:
mkdir -p /path/to/backup
chown postgres:postgres /path/to/backup
3. 执行基础备份:
sudo -u postgres pg_basebackup -D /path/to/backup -Ft -z -Xs -P -U postgres
参数说明:
- `-D`:指定备份目录
- `-Ft`:生成tar格式备份
- `-z`:启用gzip压缩
- `-Xs`:在备份期间流式传输WAL文件
- `-P`:显示进度
- `-U`:指定连接用户
4. 验证备份:
ls -lh /path/to/backup
应该能看到类似 `base.tar.gz` 、25482.tar.gz和 `pg_wal.tar.gz` 的文件.
base.tar.gz --基础数据文件,恢复的时候解压到postgresql的数据目录,这里是
/var/lib/postgresql/16/main/
pg_wal.tar.gz--wal日志归档数据,恢复的时候解压到/var/lib/postgresql/16/main/pg_wal目录
-
还原操作步骤
1. 停止 PostgreSQL 服务(实际情况可以不停止,但需重启服务)
sudo systemctl stop postgresql
2. 备份原数据目录并创建恢复目录
mv /var/lib/postgresql/16/main /var/lib/postgresql/16/main_old
mkdir /var/lib/postgresql/16/main
chown postgres:postgres /var/lib/postgresql/16/main
chmod 0750 /var/lib/postgresql/16/main
3. 解压备份文件:
sudo -u postgres tar -xzf /path/to/backup/base.tar.gz -C /var/lib/postgresql/16/main
Sudo -u postgres tar -xzf /path/to/backup/pg_wal.tar.gz -C /var/lib/postgresql/16/main/pg_wal
查看自定义表空间映射关系,可以看到,自定义空间位置是/opt/custome-tablespace/
将24582.tar.gz解压到该目录下
注意:如果24582.tar解压放置的目录不正确,会导致postgresql报错
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432"failed: No such file or directory Is the server running locally and accepting connections on that socket?
4. 配置恢复参数(可选)
修改 `postgresql.auto.conf` (PostgreSQL 12+):
restore_command = 'cp /path/to/wal_archive/%f %p'
recovery_target_timeline = 'latest'
5. 启动 PostgreSQL 服务
sudo systemctl start postgresql
6. 监控恢复进度:
sudo -u postgres tail -f /var/log/postgresql/postgresql-12-main.log
注意事项
1. 确保备份和还原使用相同或兼容的PostgreSQL版本
2. 备份期间数据库会保持可用状态
3. 对于大型数据库,备份和还原可能需要较长时间
4. 考虑使用 `-c fast` 参数进行快速检查点(可能影响性能)
5. 对于生产环境,建议定期测试备份的恢复过程