我近期要迁移一个数据到一个新的服务器, 数据有点多, 大约80G。我弄一个新的服务器,这个服务器有100G的硬盘空间。 当时想我只有80G的数据,应该是够了的。
但是我忘了考虑一个重要的问题。 在我导出我原有的数据的时候我才猛然发现,我导出的数据有80G。 我要把导出的数据上传到我的服务器上, 然后使用 mongorestore 把这80G的数据导入我的mongodb 数据库。 只是我导出的备份文件占用80G的硬盘,再把这个文件导入数据库的话再占用 80G, 那么我的硬盘至少要有160G的空间才可能进行操作。这几乎变成了一个不可能完成的任务。
一些看上去可行实际上不行的方案
- 挂载一个临时硬盘到VPS服务器, 这个方法不行,因为我买的是racknerd的特价VPS,没有挂载额外硬盘的功能
- 不用导出数据库, 直接保存数据库文件夹, 然后用FTP把把文件夹上传到新服务器。 直接对文件夹操作本来就不被官方推荐, 这样要先把原数据停了再进行备份,FTP上传这些锁碎的数据库文件实际上非常的慢。
我找到一个我原来以为不行, 却实际上可行的方法。 就挂载一个临时硬盘的方法有点像,只是这次是挂载一个网盘。 我原来以为不行是出于两点,一是以为挂载的网盘在使用的时候可能会需要硬盘做为缓存,比如我访问一个80G的网盘文件, 硬盘也要拿80G出来给网盘临时使用。 第二是我以为挂载的网盘不能被 docker mount 成volume. 实际的使用过程中,我发现这两个都不是问题。 唯一的问题就是访问网盘比真实的硬盘慢一些,所以整个导入过程花的时间久一些。
wasabi 提供一个月的免费试用, 所以我并没有额外花钱。 我注册一个 wasabi 账号, 再按 racknerd给的教程, 使用以下指令挂载了网盘。 然后按正常的方式把这个网盘 mount 成 docker container 的一个文件夹。 然后在docker container 里面使用 mongorestore 指令成功的恢复了我的数据库。
s3fs fengstatsbot /root/wasabi -o passwd_file=/etc/.passwd_wasabi -o url=https://s3.eu-west-2.wasabisys.com
注意看, s3fs 16E 0 16E 0% /root/wasabi 就是我挂载的网盘
oot@racknerd-af80cf:~/wasabi/stats/stats# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 443M 1.5M 441M 1% /run
/dev/vda4 94G 22G 68G 25% /
tmpfs 2.2G 0 2.2G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda2 488M 130M 322M 29% /boot
tmpfs 443M 4.0K 443M 1% /run/user/0
overlay 94G 22G 68G 25% /var/lib/docker/overlay2/ff0314fcf8c7d3e614a2d712d983a92e274a9259277037b5553caea0ef97d8a4/merged
overlay 94G 22G 68G 25% /var/lib/docker/overlay2/fc2591d2af7538de314fb1847babee7269a0e588b7ec80ea7013083bee9c05a0/merged
overlay 94G 22G 68G 25% /var/lib/docker/overlay2/26997f809fe83b948b60f8434cf3cdf46e6fc06026f34e531718ff1433327f64/merged
s3fs 16E 0 16E 0% /root/wasabi
overlay 94G 22G 68G 25% /var/lib/docker/overlay2/737b93948b99ad20e98a93099b3dc2a74523be8cfc4d3259b262a174cd86466f/merged
overlay 94G 22G 68G 25% /var/lib/docker/overlay2/02cee480bf0bc0b02778a43ad278eacd662c35daa61cfa54c77fb20fcdea3f28/merged
overlay 94G 22G 68G 25% /var/lib/docker/overlay2/843d065ca68ba99f33cd6d84f3baed2526515d5c2106ede593a5c3363c6417fa/merged
root@racknerd-af80cf:~/wasabi/stats/stats#