《PostgreSQL17 在 openEuler2403 上的备份与恢复:pg_dump 与 pg_restore 用法》
生产环境建议结合 WAL 归档实现 PITR(时间点恢复),最小化数据丢失风险。备份文件应加密存储,敏感数据需符合 GDPR/HIPAA 规范。
·
PostgreSQL 17 在 openEuler 2403 上的备份与恢复:pg_dump 与 pg_restore 用法
1. 核心概念
- 备份:将数据库结构和数据导出为可移植文件
- 逻辑备份:通过 SQL 语句重建数据库(
pg_dump) - 物理备份:直接复制数据文件(本文不涉及)
- 逻辑备份:通过 SQL 语句重建数据库(
- 恢复:将备份文件还原到数据库(
pg_restore)
2. 准备工作
-
安装 PostgreSQL 17(openEuler 2403):
sudo dnf install postgresql17-server sudo /usr/pgsql-17/bin/postgresql-17-setup initdb sudo systemctl start postgresql-17 -
创建测试数据库:
CREATE DATABASE testdb; \c testdb CREATE TABLE employees (id SERIAL PRIMARY KEY, name VARCHAR(50));
3. pg_dump 备份操作
基本语法:
pg_dump [选项] 数据库名 > 备份文件.sql
常用选项:
| 选项 | 说明 |
|---|---|
-Fc |
生成自定义压缩格式(推荐) |
-U username |
指定连接用户 |
-h host |
数据库主机地址 |
-p port |
连接端口(默认 5432) |
备份示例:
# 备份整个数据库(SQL 文本格式)
pg_dump -U postgres testdb > testdb_backup.sql
# 压缩格式备份(高效存储)
pg_dump -Fc -U postgres testdb > testdb_backup.dump
4. pg_restore 恢复操作
基本语法:
pg_restore [选项] -d 目标数据库 备份文件.dump
关键选项:
| 选项 | 说明 |
|---|---|
-c |
恢复前清除现有对象 |
-C |
自动创建目标数据库 |
-j NUM |
使用多线程恢复(加速大库还原) |
恢复示例:
# 恢复到新数据库(自动建库)
pg_restore -C -U postgres -d postgres testdb_backup.dump
# 覆盖现有数据库(清除旧数据)
pg_restore -c -U postgres -d testdb testdb_backup.dump
5. 高级场景
1. 并行备份加速:
pg_dump -Fd -j 4 -U postgres testdb -f /backup/testdb_dir
-Fd生成目录格式,-j 4启用 4 个线程
2. 增量备份策略:
# 每日全量备份
pg_dump -Fc testdb > full_$(date +%F).dump
# 配合 WAL 归档实现时间点恢复
vim ${PGDATA}/postgresql.conf
配置项:
archive_mode = on
archive_command = 'cp %p /wal_archive/%f'
6. 故障排查
- 权限问题:
chown postgres:postgres /backup/* - 版本兼容性:
- pg_dump 17 可恢复至 ≥12 的版本
- 低版本备份需升级后才能恢复至高版本
- 连接失败: 检查
pg_hba.conf文件:host all all 0.0.0.0/0 md5
7. 最佳实践
- 定时备份:通过 cron 每日自动执行
0 2 * * * pg_dump -Fc -U postgres testdb > /backup/daily_$(date +\%F).dump - 验证备份:定期执行测试恢复
- 存储分离:备份文件保存至独立存储设备
- 监控指标:关注备份文件大小和时长变化
重要提示:生产环境建议结合 WAL 归档实现 PITR(时间点恢复),最小化数据丢失风险。备份文件应加密存储,敏感数据需符合 GDPR/HIPAA 规范。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)