每天将 Postgresql 数据库从小型 SSD 自动备份到多个硬盘

Posted

技术标签:

【中文标题】每天将 Postgresql 数据库从小型 SSD 自动备份到多个硬盘【英文标题】:Automating Postgresql database backup from small SSD to multiple harddrives daily 【发布时间】:2015-08-20 07:35:37 【问题描述】:

这里是 sql 和 pg 的相对新手,所以这是一个关于从流中备份日常数据的相对开放的问题。如果具体的命令/脚本很简单,将不胜感激,否则我很高兴被引导到更具体的文章/教程,了解如何实现需要做的事情。

情况

我每天记录来自一些外部服务器的各种数据流,数据量为每天几 GB。我希望能够将这些数据存储到更大的硬盘驱动器上,然后用于从中提取信息以供日后分析。

硬件

x1 SSD (128GB)(操作系统 + 应用程序)

x2 HDD(每个 4TB)(存储,用于冗余的第二个驱动器)

需要做什么

目前的计划是让 SSD 存储一个由每日记录数据组成的临时数据库。当服务器负载较低时(清晨),将整个临时数据库转储到两个存储磁盘中的每一个上的两个单独的备份实例中。存储临时数据库的动机是减少硬盘驱动器的负载。此外,每日数据足够小,可以在服务器负载增加之前复制到存储驱动器。

问题

    这是一种可接受的方法吗? 直接将数据推送到其中一个存储驱动器,考虑到主数据库,并自动从该驱动器到第二个存储驱动器的计划备份,是否更好/更安全? 执行此操作需要哪些特定命令以确保数据完整性(即,在进行备份时,仍会记录新数据)

稍后在预算允许的情况下,硬件将被升级,但以上是目前的情况。

谢谢!

【问题讨论】:

您熟悉 PITR / WAL 归档吗? @CraigRinger 我不是;但是我目前正在阅读有关它的 pg 文档 【参考方案1】:

构建备份系统时的第一条规则 - 做最适合您的最简单的事情。

运行 pg_dump 将确保数据完整性。您需要注意最后备份的项目是什么,以确保您不会删除任何更新的内容。删除数据后,如果您负担得起日志记录,您可能希望在各种表上运行 CLUSTER 或 VACUUM FULL。

另一种选择是拥有一个空模板数据库并执行以下操作:

    暂停应用程序 + 断开连接 将数据库从“current_db”重命名为“old_db” 创建数据库 current_db 模板 my_template_db 复制您需要的任何其他位(序列号等) 重新连接应用程序 转储 old_db + 将备份复制到其他磁盘。

如果您真正想要的是两个独立的实时数据库,一个小型快速数据库,一个用于长时间运行的查询,然后调查表空间。创建两个表空间——大磁盘上的默认表空间和 SSD 上的“小”表空间。将您的小型数据库放在 SSD 上。然后,您可以使用外部数据包装器 (FDW) 或转储/恢复等从一个表复制到另一个表。

【讨论】:

嗨@RichardHuxton,感谢您的回复。理想情况下,数据库不会断开连接,因为数据总是有可能到达。只需要一个实时数据库,但该数据库需要每天至少持续备份一次。您对在 SSD 上保存一个小型临时数据库并使用它转储到存储硬盘驱动器而不是连续写入存储硬盘驱动器有何看法。不值得额外的复杂程度?以块的形式从 SSD 复制的理由将减少 HDD 的磨损。

以上是关于每天将 Postgresql 数据库从小型 SSD 自动备份到多个硬盘的主要内容,如果未能解决你的问题,请参考以下文章

每天将 1 亿行加载到 DWH

可以创建每天将 SQL 数据库写入 MongoDB 的管道吗?

是否可以创建每天将SQL数据库写入MongoDB的管道?

如何在mysql phpmyadmin中每天将记录从一个表复制到另一个表

Django Query 每天将两行中的值聚合为单个结果

SSD 相关基础知识