MongoDB备份计划

时间:2010-09-28 08:29:02

标签: backup database-backups mongodb

我想从MySQL切换到MongoDB,但我不接受大量数据丢失(超过1小时)。

我需要有3个备份计划:

  1. 每小时备份计划。每隔X分钟将数据刷新到磁盘,如果服务器出现问题,我将确保在重新启动后,它将至少在一小时前获得所有数据。我可以配置吗?

  2. 每日备份计划。数据每天都会同步到备份磁盘,因此即使服务器爆炸,我也可以在几个小时内恢复昨天的数据。我应该使用fsync,master-slave还是别的什么?我希望流量最小,因此理想情况下只会发送更改。

  3. 每周备用计划。数据同步到第二个备份磁盘,因此如果服务器和第一个备份磁盘都爆炸,我至少有上周的数据。这是可靠性问题所以可以通过网络发送所有数据。

  4. 我该怎么做?

5 个答案:

答案 0 :(得分:21)

  1. fsync command将数据刷新到磁盘。默认情况下,它每60秒执行一次,但可以使用--syncdelay命令行参数进行配置。

  2. documentation on backups对每日和每周备份有一些很好的指导。对于每日备份,master-slave configuration似乎是最佳选择,因为它只会同步更改。

  3. 对于每周备份,您还可以使用主从配置或复制。另一个选项是mongodump utility,它将备份整个数据库。它能够在数据库运行时创建备份,因此您可以在主数据库或其中一个从服务器上运行它。在备份之前,您还可以lock奴隶。

答案 1 :(得分:0)

如果您想完全外包备份解决方案,MongoDB Management Service每六个小时拍摄一次快照。快照上的默认保留策略将允许您获得24小时的时间点还原,一周的每日快照,一个月的每周快照以及一年的每月快照。

FAQ具有完整的保留政策。

备份服务通过读取oplog不断备份副本集,因此开销低于完整的本地定期快照。

答案 2 :(得分:0)

可以使用automongobackup

答案 3 :(得分:0)

如果要创建从从mongodb数据库到S3的备份,请尝试使用此备份脚本。

  1. 数据库主机(次要优先级,以避免影响主要性能)

    HOST =' SomeHost / mongodbtest-slave'

  2. 数据库名称 DBNAME = ***

  3. S3存储桶名称 BUCKET = *-备份

  4. Linux用户帐户 USER = ubuntu

  5. 当前时间 TIME = /bin/date +%d-%m-%Y-%T

  6. 密码 密码= somePassword#!2*1

  7. 用户名 USERNAME = someUsername

  8. 备份目录 DEST = / home / ubuntu / tmp

  9. 备份目录的Tar文件 TAR = $ DEST /../$ TIME.tar

  10. 创建备份目录(-p以避免警告(如果已存在)) / bin / mkdir -p $ DEST

  11. 日志 echo“在$ TIME将$ HOST / $ DBNAME备份到s3:// $ BUCKET /”;

  12. 从mongodb主机转储到备份目录

mongodump --port 27017 -d DBNAME -u用户名-p密码-o $ DEST

  1. 创建备份目录的tar / bin / tar cvf $ TAR -C $ DEST。

  2. 将tar上载到s3 / usr / bin / aws s3 cp $ TAR s3:// $ BUCKET /

  3. 本地删除tar文件 / bin / rm -f $ TAR

  4. 删除备份目录 / bin / rm -rf $ DEST

全部完成 回声“备份在https://s3.amazonaws.com/$BUCKET/$TIME.tar

您可以使用上述步骤将它们放在shell可执行文件中,并使用crontab命令以任意间隔执行此操作。

答案 4 :(得分:0)

第一点。

MongoDB 有一个类似“durable write operation”的术语。如果启用了 journaling,您可能只会丢失尚未写入日志的数据。这是一个非常小的时间(默认为 100 毫秒)

关于第二点和第三点。

您可以设置主从复制,但这并不能保护您免受数据错误的影响(例如,如果不小心删除了重要数据)。因此,您需要以一种或另一种方式提供定期备份。

这里有几种方法:

  1. LVM 快照是一个很好的解决方案,如果您的文件系统支持它并且在您的 mongoDB 中启用了日志。如需了解详情,请参阅here
  2. mongodump - 您可以创建一个 shell 脚本,该脚本将通过 cron 运行计划备份并将它们发送到存储。这是一个example of a good script
  3. 备份即服务。有很多解决方案可以为您进行备份。