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

时间:2015-06-05 11:09:37

标签: database postgresql backup redundancy

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

场合

我每天以几GB /天的速度记录来自某些外部服务器的各种数据流。我希望能够将这些数据存储到更大的硬盘上,然后将其用于从日后分析信息。

硬件

x1 SSD(128GB)(OS +应用程序)

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

需要做什么

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

问题

  1. 这是一种可接受的方法吗?
  2. 将数据直接推送到其中一个存储驱动器是否更好/更安全,考虑主数据库,并将从该驱动器到第二个存储驱动器的计划备份自动化?
  3. 执行此操作需要哪些特定命令以确保数据完整性(即在备份过程中,仍会记录新数据)
  4. 在预算允许的情况下,硬件将会升级,但上述内容现在已经到位。

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 暂停应用程序+断开连接
  2. 从" current_db"重命名数据库到" old_db"
  3. CREATE DATABASE current_db TEMPLATE my_template_db
  4. 复制您需要的任何其他位(序列号等)
  5. 重新连接应用程序
  6. 将old_db +副本转储到其他磁盘。
  7. 如果你真正想要的是两个独立的实时数据库,一个小的快速数据库和一个较大的实时数据库用于长时间运行的查询,然后调查表空间。创建两个表空间 - 大磁盘上的默认值和" small"一个在您的SSD上。将小型数据库放在SSD上。然后你可以使用外部数据包装器(FDW)或转储/恢复等从一个表复制到另一个表。