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

标签 database postgresql backup redundancy

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

情况

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

硬件

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

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

需要做什么

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

问题

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

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

谢谢!

最佳答案

构建备份系统时的首要规则 - 做对您有用的最简单的事情。

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

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

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

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

关于database - 每天将 Postgresql 数据库从小型 SSD 自动备份到多个硬盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665045/

相关文章:

database - 内存数据库和关系数据库+NoSQL数据库有什么区别?

java - 仅当字段是时间戳时如何按日期选择?

postgresql - Postgres : Index not being used or how to optimize

mysql - 操纵巨大的 MySQL 转储文件

mysql - 缓慢的 MySQL 查询正在填满我的磁盘空间

mysql - 在 MySQL 中,我可以将 id FK 与另一个表中的 varchar 进行比较吗

InnoDB 上的 MySql 数值类型迁移

php - Postgres - 更新随着时间的推移变得越来越慢

c# - 如何备份和恢复Mongodb数据库

iphone - 如何测试从 iCloud 备份恢复开发中的 iOS 应用程序?