备份与恢复
掌握逻辑备份与恢复方法
了解物理备份方案
能制定合理的备份策略
核心讲解
(1)备份方式分类
表格
方式 | 原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
逻辑备份(pg_dump) | 导出 SQL 脚本 | 简单、灵活、跨版本 | 大库慢,恢复慢 | 小库、数据迁移 |
物理备份 | 复制数据文件 | 速度快,大库适用 | 跨版本差、恢复到同版本 | 生产环境、大库 |
(2)逻辑备份 pg_dump
导出单个库:
pg_dump 库名 > 文件.sql导出所有库:
pg_dumpall > all.sql自定义格式:
-Fc,压缩,pg_restore 恢复常用参数:
-U用户-h地址-F c自定义格式-t指定表-n指定模式
(3)恢复
SQL 文件:
psql -d 库名 -f 文件.sql自定义格式:
pg_restore -d 库名 文件.dump
(4)备份策略
全量备份:每天 / 每周一次
增量备份:配合 WAL 归档
保留策略:保留 30 天备份
定期验证备份可用性
操作示例
# ===== 逻辑备份 =====
# 1. 导出单个库为SQL
pg_dump -U postgres school_db > school_db.sql
# 2. 导出为压缩自定义格式(推荐,小很多)
pg_dump -U postgres -F c school_db > school_db.dump
# 3. 只导出指定表
pg_dump -U postgres -t student -t class school_db > student_class.sql
# 4. 导出所有库
pg_dumpall -U postgres > all_databases.sql
# ===== 恢复 =====
# 1. SQL文件恢复
psql -U postgres -d school_db -f school_db.sql
# 2. 自定义格式恢复
pg_restore -U postgres -d school_db school_db.dump
# 3. 恢复到新库
createdb -U postgres new_db
pg_restore -U postgres -d new_db school_db.dump
常见误区
备份不用验证:备份完一定要定期恢复测试,不然备份坏了都不知道
大库用 pg_dump:几十 G 以上的库用 pg_dump 太慢,用物理备份
备份还在同一个盘:备份要异地存放,不然磁盘坏了一起没
pg_dump 会影响业务:在线备份影响很小,但高峰时段尽量避开
课后练习
用 pg_dump 备份你的测试库,分别导出 SQL 和自定义格式
删除数据库,从备份恢复
设计一个 7 天循环备份策略
思考:逻辑备份和物理备份分别适合什么场景?

