制作热备份MongoDB(TokuMX)数据库实例的最佳方法

时间:2014-03-21 09:48:53

标签: database-backups tokumx

关于在生产中运行的TokuMX服务器的远程数据库的备份,我有几个问题(没有分片和复制)。单个子句不会停止运行Tokumx实例。

  1. 对运行TokuMX服务器进行热备份的最佳方法是什么(企业版中的TokuMX Hot Backup除外)。

  2. 有关MongoDB的建议备份方法的问题:

    [backup-host]# mongodump --host mongodb-host --port 27017 --db mongodevdb --username mongouser --password mongopwd
    
    • 此命令是否更喜欢进行热备份?
    • 发出此命令时我应该使用哪个端口?
    • cron使用这个命令并且每天运行它是不是很好?
    • 这个命令有没有陷阱?

1 个答案:

答案 0 :(得分:2)

免责声明:我在Tokutek工作,我是TokuMX的工程师。

没有“最佳”方式来备份TokuMX,每个应用程序都不同,最好了解所有选项并做出自己的决定。

TokuMX的备份选项包括:

  1. 企业热备份。
  2. 文件系统级快照(LVM,EBS,xfs_freeze),用于复制dbpath和logDir中的所有内容。
  3. 使用mongodump。
  4. 请注意fsyncLock 工作,因为即使客户端线程没有做任何事情,后台线程仍将写入文件系统。使用fsyncLock只会给你一个损坏的备份。

    文件系统快照和企业热备份都具有复制序列化压缩数据的优势,因此您可以避免查询所有集合并通过线路传输未压缩的BSON数据的成本。此外,这些选项不会破坏缓存中关于哪些数据最重要的信息,而mongodump将导致所有内容被分页,可能会驱逐对您的应用程序有用的数据。

    企业热备份比文件系统级快照具有额外的优势,它更便宜(您不需要像快照那样保留额外空间),可以限制它以满足I / O配额,以及生成的备份状态是备份完成时的状态,而不是启动时的状态。因此,如果为备份复制数据需要12个小时,那么文件系统级快照备份将比使用热备份插件的等效备份落后12个小时。

    对于简单用途,如果您不关心性能,缓存失效,网络带宽或新近度,则mongodump可能是最佳选择。它也是支持备份单个数据库或集合的唯一选项。

    对于mongodump,其用法与MongoDB相同。您需要使用运行服务器的主机和端口,默认值为27017.如果是默认值,则无需指定任何--port选项。

    你绝对可以每天使用cron运行它,我建议像这样:

    SHELL=/bin/bash
    0 0 * * * /usr/bin/mongodump --host <host> -o "/var/lib/backup/tokumx-backup-$(date +%Y%m%d)"
    

    mongodump的主要缺陷只是它更昂贵,并且它会破坏缓存中的信息,说明哪些数据很重要。它也不会在热备份和文件系统级快照备份等多个集合中获得完美一致的快照。 mongodump可能包含一个集合中某些写入的效果,并且不包含早期写入在不同集合中的效果。

    我还希望定义一个使旧备份到期的方案。