免责声明:我在 Tokutek 工作,我是一名在 TokuMX 工作的工程师。
备份 TokuMX 没有“最佳”方式,每个应用程序都不同,最好了解所有选项并做出自己的决定。
TokuMX 的备份选项如下:
- 企业热备份。
- 文件系统级快照(LVM、EBS、xfs_freeze)复制出 dbpath 和 logDir 中的所有内容。
- 使用 mongodump。
请注意 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 可能在一个集合中包含一些写入的效果,而不包含在不同集合中的早期写入的效果。
我预计,您还需要定义一个使旧备份过期的方案。