注:本文的各种命令如果不成功,那就试试前面加sudo提升权限,请各位大爷允许笔者偷个小懒

如何备份

mongodb的备份(看似)非常简单,只要装了mongodb,有mongodump工具,输入如下命令即可:

mongodump -h 10.10.10.10 -d dbname -o ./backup -u user -p password
  • -h 后跟目标服务,即要备份的服务的ip
  • -d 为要备份的db名,不填为备份全部
  • -o 为备份到本地的目录
  • -u 为用户名(开启auth模式下需要)
  • -p 为密码(开启auth模式下需要)

如何连接远程mongodb

上面备份mongodb的方法的确看似简单,有经验的同学一定会意识到问题,貌似有点太简单了。没错,这里有几个坑,要填平了才能做到这样简单。第一个可能遇到的问题就是连接不上远程的mongodb,直接上解决方法。

mongodb在启动时会有一个默认的配置文件,linux下为/etc/mongod.conf,mac下如果用brew启动则为/usr/local/etc/mongod.conf,windows下暂时还没玩过。这里要说明下,笔者用的mongodb@3.6,跟之前2.x的配置文件格式似乎不同,这里就以linux下3.6的为准了,请各位朋友注意。

vi /etc/mongod.conf

开始编辑配置文件,找到net下的bindIp,修改为0.0.0.0即可,通常默认都是127.0.0.1,应该是为了安全起见。

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.

然后重启mongodb,就可以了。再额外多介绍下mongod.conf,教程里通常会告诉我们,启动mongo时,需要加上--dbpath --fork之类的参数,我们在配置文件里都可以找到,所以在这里修改一下,启动时就不必写那么多参数了。

另外,mongodb有很多的可视化管理工具,笔者用的Robot 3T,在连接数据库时就遇到了连接不上的问题,按照上述方法修改为0.0.0.0之后就可以了。

如何设置用户名/密码

把bindIp改为0.0.0.0之后,是有安全隐患的,而且是非常大的隐患。随便谁,知道了你的服务器ip,就可以连上你的mongodb,备份一份到本地,然后删了你的数据库,给你发条信息:“想要数据吗?比特币拿来”。所以,为mongodb设置访问权限,是十分必要的,下面就说一下如何添加用户名密码。

首先,明确一点,mongodb在启动时,输入--auth或配置文件里配置authorization: enabled,就开启了“登录验证”模式。举个最简单的例子,进入mongo的命令模式。不加auth时,show dbs是可以看到所有db的;如果开了auth,就会给你报个错,你就看不到了,安全了很多吧。

至于如何加权限,网上有很多,这里随便搜了一篇比较详细的,大家参考下就好如何对MongoDB 3.2.7进行用户权限管理配置。友情提示,mongo@3.x的一些语法也是有所变化的,比如addUser现在变成了createUser,大家注意区分版本。

需要注意的是,配置文件可能不太一样,笔者用的是如下格式的,其他方案没有尝试过,就不瞎说了,也就给大家参考下。

security:
  authorization: enabled

另外,笔者每次启动mongo时,为了保险起见,都会带上配置文件的参数

mongod -f /etc/mongod.conf

所以,如果上文当中有什么错误,欢迎读者提出来,并纠正。


总结

  1. mongodb备份与还原推荐用其自带的mongodump工具,很方便
  2. 远程连接mongodb时,记得修改监听ip,否则连不上
  3. 允许远程连接之后,一定要设置用户权限