2015-06-05 27 views
2

这里是sql和pg的相对新手,所以这是一个相对开放的问题,关于从流中备份日常数据。具体的命令/脚本,如果它很简单,将不胜感激,否则我很乐意被引导到更具体的文章/教程如何实现需要做什么。自动将Postgresql从小型SSD备份到多个硬盘驱动器的数据库备份

形势

我的几个GB /天的量每天记录一些外部服务器的各种数据流。我希望能够将这些数据存储到较大的硬盘驱动器上,这些硬盘驱动器随后将用于从以后的日期抽取信息进行分析。

硬件

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

X2 HDD(4TB每个)(存储,以备不时之需第2盘)

需要采取哪些措施

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

问题

  1. 这是一个可以接受的方法?
  2. 将数据直接推送到其中一个存储驱动器,考虑主数据库并自动执行从该驱动器到第二个存储驱动器的计划备份是更好还是更安全?
  3. 什么具体的命令将被要求这样做是为了保证数据的完整性(即在备份过程中,新的数据仍然会被记录)

在以后的日子,当预算允许的硬件会升级,但以上是现在的东西。

谢谢!

+0

您是否熟悉PITR/WAL归档? –

+0

@CraigRinger我不是;但我目前正在阅读关于它的pg文档 – undercurrent

回答

0

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

运行pg_dump将确保数据的完整性。你要注意最后一项备份是什么,以确保你不删除任何新的东西。在删除数据后,如果您可以负担日志,您可能希望在各种表上运行CLUSTER或VACUUM FULL。

另一种选择是有一个空的模板数据库,并完成类似:

  1. 暂停应用+断开 “current_db”
  2. 重命名数据库 “old_db”
  3. CREATE DATABASE current_db模板my_template_db
  4. 复制您需要的任何其他位(序列号等)
  5. 重新连接应用程序
  6. 转储old_db +将备份复制到其他磁盘。

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

+0

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