我想从MySQL切换到MongoDB,但我不接受大量数据丢失(超过1小时)。
我需要有3个备份计划:
每小时备份计划。每隔X分钟将数据刷新到磁盘,如果服务器出现问题,我将确保在重新启动后,它将至少在一小时前获得所有数据。我可以配置吗?
每日备份计划。数据每天都会同步到备份磁盘,因此即使服务器爆炸,我也可以在几个小时内恢复昨天的数据。我应该使用fsync,master-slave还是别的什么?我希望流量最小,因此理想情况下只会发送更改。
每周备用计划。数据同步到第二个备份磁盘,因此如果服务器和第一个备份磁盘都爆炸,我至少有上周的数据。这是可靠性问题所以可以通过网络发送所有数据。
我该怎么做?
答案 0 :(得分:21)
fsync
command将数据刷新到磁盘。默认情况下,它每60秒执行一次,但可以使用--syncdelay
命令行参数进行配置。
documentation on backups对每日和每周备份有一些很好的指导。对于每日备份,master-slave configuration似乎是最佳选择,因为它只会同步更改。
对于每周备份,您还可以使用主从配置或复制。另一个选项是mongodump utility,它将备份整个数据库。它能够在数据库运行时创建备份,因此您可以在主数据库或其中一个从服务器上运行它。在备份之前,您还可以lock奴隶。
答案 1 :(得分:0)
如果您想完全外包备份解决方案,MongoDB Management Service每六个小时拍摄一次快照。快照上的默认保留策略将允许您获得24小时的时间点还原,一周的每日快照,一个月的每周快照以及一年的每月快照。
此FAQ具有完整的保留政策。
备份服务通过读取oplog不断备份副本集,因此开销低于完整的本地定期快照。
答案 2 :(得分:0)
可以使用automongobackup。
答案 3 :(得分:0)
数据库主机(次要优先级,以避免影响主要性能)
HOST =' SomeHost / mongodbtest-slave'
数据库名称
DBNAME = ***
S3存储桶名称 BUCKET = *-备份
Linux用户帐户
USER = ubuntu
当前时间
TIME = /bin/date +%d-%m-%Y-%T
密码
密码= somePassword#!2*1
用户名
USERNAME = someUsername
备份目录 DEST = / home / ubuntu / tmp
备份目录的Tar文件 TAR = $ DEST /../$ TIME.tar
创建备份目录(-p以避免警告(如果已存在)) / bin / mkdir -p $ DEST
日志 echo“在$ TIME将$ HOST / $ DBNAME备份到s3:// $ BUCKET /”;
从mongodb主机转储到备份目录
创建备份目录的tar / bin / tar cvf $ TAR -C $ DEST。
将tar上载到s3 / usr / bin / aws s3 cp $ TAR s3:// $ BUCKET /
本地删除tar文件 / bin / rm -f $ TAR
删除备份目录 / bin / rm -rf $ DEST
全部完成 回声“备份在https://s3.amazonaws.com/$BUCKET/$TIME.tar
您可以使用上述步骤将它们放在shell可执行文件中,并使用crontab命令以任意间隔执行此操作。
答案 4 :(得分:0)
第一点。
MongoDB 有一个类似“durable write operation”的术语。如果启用了 journaling,您可能只会丢失尚未写入日志的数据。这是一个非常小的时间(默认为 100 毫秒)
关于第二点和第三点。
您可以设置主从复制,但这并不能保护您免受数据错误的影响(例如,如果不小心删除了重要数据)。因此,您需要以一种或另一种方式提供定期备份。
这里有几种方法: