如果我想通过复制原始文件来备份数据库。我需要复制哪些文件?只有db-name.ns,db-name.0,db-name.1 ....或整个文件夹(local.ns ..,journal)。我正在运行副本集。我理解锁定隐藏的辅助节点然后将文件复制到新位置的过程。但我想知道我需要复制整个文件夹还是只复制一些文件。
THX
答案 0 :(得分:3)
简单回答:所有这些。听起来很明显。这就是为什么:
到目前为止,我发现的最佳解决方案是创建了MongoDB数据所在的文件系统的LVM快照。为了使这些工作,需要包括期刊。通常,您不需要专门的备份节点来实现此方法。但是,有点设置很复杂。
假设您将数据放在默认数据目录/data/db
中,并且您没有更改任何路径。然后,您将逻辑卷安装到/data/db
并使用它来保存数据。假设你没有这样的东西,这是一个循序渐进的指南:
/dev/VolGroup/LogVol1
。 确保您仅使用卷组中大约80%的可用磁盘空间来创建逻辑卷。 在逻辑卷上创建文件系统。我更喜欢XFS,所以我们在/dev/VolGroup/LogVol1
上创建了一个xfs文件系统:
mkfs.xfs /dev/VolGroup/LogVol1
在/mnt
mount /dev/VolGroup/LogVol1 /mnt
关闭mongod
:
killall mongod
(请注意,upstart脚本有时会在关闭mongod时出现问题,而且无论如何此命令都会优雅地停止mongod。)
通过发出
将数据文件从/data/db
复制到/mnt
cp -a /data/db/* /mnt
调整/etc/fstab
以便在重新启动时装入逻辑卷:
# The noatime parameter increases io speed of mongod significantly
/dev/VolGroup/LogVol1 /data/db xfs defaults,noatime 0 1
从当前的outpoint上卸下逻辑卷并将其重新安装到正确的位置:
cd && umount /mnt/ && mount /data/db
重启mongod
现在创建备份就像
一样简单创建快照:
lvcreate -l100%FREE -s -n mongo_backup /dev/VolGroup/LogVol1
装载快照:
mount /dev/VolGroup/mongo_backup /mnt
将其复制到某处。我们需要这样做的原因是,只有在数据文件的更改不超过您在准备期间未分配的卷组中的空间之前,才能保留快照。例如,如果您有一个100GB磁盘并且为/dev/VolGroup/LogVol1
分配了80GB,则快照大小将为20GB。虽然从拍摄快照的角度来看文件系统的变化小于20GB,但一切运行正常。之后,文件系统将拒绝进行任何更改。所以你并不着急,但你绝对应该将数据移动到异地,FTP服务器或任何你认为合适的地方。请注意,压缩数据文件可能需要很长时间,并且可能会耗尽“更改空间”#34;在完成之前。就个人而言,我喜欢将较慢的HDD作为存储备份的临时位置,在HDD上执行所有其他操作。所以我的复制命令看起来像
cp -a /mnt/* /home/mongobackup/backups
当硬盘安装在/ home / mongobackup上时。
销毁快照:
umount /mnt && lvremove /dev/VolGroup/mongo_backup
释放为快照分配的空间,并删除对文件系统更改量的限制。
答案 1 :(得分:0)
整个db-Data文件夹+您拥有日志和日记的地方
答案 2 :(得分:0)
在MongoDB上备份数据的最佳解决方案是使用Mongo监控服务(MMS)。所有其他解决方案,包括手动复制文件,mongodump,mongoexport都落后于MMS。