PostgreSQL数据库备份与恢复的四种办法

 更新时间:2025年01月11日 14:13:30   作者:xiongood  
在数据为王的时代,数据库中存储的信息堪称企业的生命线,而PostgreSQL作为一款广泛应用的开源数据库,学会如何妥善进行备份与恢复操作,是每个开发者与运维人员必备的技能,今天,咱们就深入探究一下PostgreSQL相关的备份恢复策略,并附上丰富的代码示例

在数据为王的时代,数据库中存储的信息堪称企业的生命线,而PostgreSQL作为一款广泛应用的开源数据库,学会如何妥善进行备份与恢复操作,是每个开发者与运维人员必备的技能。今天,咱们就深入探究一下PostgreSQL相关的备份恢复策略,并附上丰富的代码示例。

一、pg_dump:逻辑备份的利器

pg_dump是PostgreSQL自带的用于生成数据库逻辑备份的工具。它能把数据库的结构以及数据,以SQL脚本的形式导出,方便在其他环境里重建。

  1. 备份单个数据库 假设我们有个名为test_db的数据库,要将它完整备份下来,操作如下:
pg_dump -U your_username -Fc test_db > test_db.dump

这里,-U指定用户名,-Fc表示以自定义的压缩二进制格式导出,这种格式备份速度较快,而且生成的文件体积较小 。最后将备份内容重定向到test_db.dump文件中。

  1. 备份指定表 要是只想备份数据库里的部分表,例如test_db中的users表和orders表:
pg_dump -U your_username -t users -t orders -Fc test_db > partial_dump.dump

-t参数用来指定需要备份的表名,可以多次使用这个参数来添加多个目标表。

二、pg_restore:逻辑备份的恢复操作

有了备份文件,借助pg_restore就能让数据起死回生。

  1. 恢复完整数据库 先创建一个空的目标数据库,假设叫new_test_db,然后执行恢复:
createdb -U your_username new_test_db
pg_restore -U your_username -d new_test_db test_db.dump

createdb用于创建新数据库,-d参数在pg_restore里表示目标数据库,按照备份文件test_db.dump中的指令,把数据和结构填充进新的new_test_db数据库。

  1. 恢复部分表 如果只想恢复之前备份里的部分表,例如只恢复users表:
pg_restore -U your_username -d new_test_db -t users test_db.dump

-t参数的含义和备份时一致,精准定位到需要恢复的表。

三、pg_basebackup:物理备份的实现

物理备份会直接拷贝数据库文件,相较于逻辑备份,速度更快,适合大型数据库。

  1. 基础物理备份 以超级用户身份执行以下命令:
pg_basebackup -D /path/to/backup -U your_superuser -P

-D指定备份文件存放的目录,-U是超级用户用户名,-P 会显示备份进度,让我们能实时知晓备份状态。不过物理备份要注意,目标目录必须为空,而且在备份期间数据库读写操作尽量减少,避免数据不一致。

  1. 增量物理备份 先完成一次基础物理备份,后续增量备份基于这个基础来做。我们要记录下基础备份的 WAL(Write-Ahead Logging,预写式日志)文件位置。增量备份时:
pg_basebackup -D /path/to/incremental_backup -U your_superuser -P -X stream -C -R \
--checkpoint=fast --target-wal-segment-size=16MB \
--write-recovery-conf --recovery-target-time='2025-01-15 12:00:00'

-X stream开启流模式来传输WAL日志,-C表示在备份结束后清理不再需要的WAL段,-R自动生成恢复配置文件,后面几个参数用于精细调整备份的检查点和目标WAL段大小,--recovery-target-time则设定恢复到的时间点。

四、基于WAL日志的恢复

WAL日志是PostgreSQL物理恢复的关键,就算数据库出现故障,只要WAL日志完整,就能恢复到故障前的状态。

假设数据库崩溃了,先把物理备份文件拷贝到合适位置,然后利用WAL日志恢复:

cp -R /path/to/backup /var/lib/postgresql/data
# 找到相关WAL日志,假设存放在 /var/lib/postgresql/wal_logs
cp /var/lib/postgresql/wal_logs/*.log /var/lib/postgresql/data/pg_wal
# 启动PostgreSQL服务,它会自动根据WAL日志恢复数据
sudo systemctl start postgresql

五、总结

掌握这些备份与恢复手段,就像是给PostgreSQL数据库穿上了坚固的铠甲,无论遭遇意外删除、硬件故障还是其他数据危机,都能沉着应对,守护数据资产的安全与完整。

到此这篇关于PostgreSQL数据库备份与恢复的四种办法的文章就介绍到这了,更多相关PostgreSQL数据库备份与恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostgreSQL VACUUM 清理机制详解

    PostgreSQL VACUUM 清理机制详解

    本文主要介绍了PostgreSQL VACUUM 清理机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • PostgreSQL教程(六):函数和操作符详解(2)

    PostgreSQL教程(六):函数和操作符详解(2)

    这篇文章主要介绍了PostgreSQL教程(六):函数和操作符详解(2),本文讲解了模式匹配、数据类型格式化函数、时间/日期函数和操作符等内容,需要的朋友可以参考下
    2015-05-05
  • Postgresql通过查询进行更新的操作

    Postgresql通过查询进行更新的操作

    这篇文章主要介绍了Postgresql通过查询进行更新的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql 实现查询出的数据为空,则设为0的操作

    postgresql 实现查询出的数据为空,则设为0的操作

    这篇文章主要介绍了postgresql 实现查询出的数据为空,则设为0的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 使用postgresql 模拟批量数据插入的案例

    使用postgresql 模拟批量数据插入的案例

    这篇文章主要介绍了使用postgresql 模拟批量数据插入的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL模式匹配与正则表达式方法总结

    PostgreSQL模式匹配与正则表达式方法总结

    在postgresql中使用正则表达式时需要使用关键字“~”,以表示该关键字之前的内容需匹配之后的正则表达式,这篇文章主要给大家介绍了关于PostgreSQL模式匹配与正则表达式的相关资料,需要的朋友可以参考下
    2022-11-11
  • 对PostgreSQL中的慢查询进行分析和优化的操作指南

    对PostgreSQL中的慢查询进行分析和优化的操作指南

    在数据库的世界里,慢查询就像是路上的绊脚石,让数据处理的道路变得崎岖不平,想象一下,你正在高速公路上飞驰,突然遇到一堆减速带,那感觉肯定糟透了,本文介绍了怎样对 PostgreSQL 中的慢查询进行分析和优化,需要的朋友可以参考下
    2024-07-07
  • pgsql 如何手动触发归档

    pgsql 如何手动触发归档

    这篇文章主要介绍了pgsql手动触发归档的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL 查看服务器版本的三种方法

    PostgreSQL 查看服务器版本的三种方法

    这篇文章主要介绍了PostgreSQL 查看服务器版本的几种方法,本文给大家分享三种方法,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-03-03
  • PostgreSQL pg_filenode.map文件介绍

    PostgreSQL pg_filenode.map文件介绍

    这篇文章主要介绍了PostgreSQL误删pg_filenode.map怎么办,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09

最新评论