1.启动
查看启动选项
mongod --help
几个重要的选项
dbpath:数据目录,启动时mongod实例会在该目录下创建mongod.lock文件,防止其它mongod实例使用该数据目录 port:服务器监听的端口号,默认为27017 fork:以守护进程的方式运行 logpath:日志文件 logappend:mongod启动时默认将清除原来的日志记录,此选项可以保留原来的日志记录 nohttpinterface:默认情况下,mongod会启动一个http服务器,该服务器的监听端口比port大1000,此选项可以关闭该端口 rest:开启REST支持,开启后可在http服务器上查看_commands auth:开启权限校验 bindip:指定客户端的IP noscripting:完全禁止服务端JS的执行 repair:修复所有数据库 config:指定配置文件
关于配置文件:
1)以#开头的行是注释
2)采用"选项=值"的方式指定选项,并且大小写敏感
3)开关选项的值为true
2.停止
1)Ctrl+C
2)kill -2 PID
3)kill PID
4)在admin数据库中运行db.shutdownServer()
关闭过程:
1)等待当前运行的操作或者文件预分配完成
2)关闭所有打开的连接
3)将缓存的数据刷新到磁盘
注:不能使用kill -9 PID,这样会导致数据库直接关闭,忽略上述步骤。
3.监控
1)通过HTTP查看
http://localhost:28017/
http://localhost:28017/_status
2)serverStatus命令
db.runCommand({"serverStatus": 1});
3)mongostat进程
4.安全和认证
1)权限管控
超级用户(管理员):admin数据库中的用户,可以读写所有数据库,执行特定的管理命令。
//新增 //方法一 db.addUser(name, pwd[, isReadOnly]); e.g. db.addUser("micromsg", "micromsg"); db.addUser("readonly", "readonly", true); //方法二 db.addUser({ "user": ..., "pwd": ..., "roles": [...] }); roles:用户权限,权限列表如下: --read --readWrite --dbAdmin --userAdmin --clusterAdmin --readAnyDatabase --readWriteAnyDatabase --userAdminAnyDatabase --dbAdminAnyDatabase e.g. db.addUser({ "user": "test", "pwd": "test", "roles": ["read"] }); //使用,必须使用auth选项启动服务才能开启权限校验 db.auth(name, pwd); e.g. db.auth("readonly", "readonly"); //删除 db.removeUser(name); e.g. db.removeUser("test");
2)工作原理
数据库的用户账号以文档的形式存储在system.users集合里
3)其它安全措施
--使用SSH隧道或者类似技术做客户端和服务器之间的加密
--将MongoDB服务器部署在防火墙后或只有应用服务器能访问的网络中
--使用bindip和noscripting选项启动服务
5.备份和修复
1)直接备份数据目录
直接创建dbpath数据目录中所有文件的副本
缺点:
在运行时复制数据目录不太安全
2)mongodump和mongorestore进程
mongodump是一种能在运行时备份的工具,原理是对运行的MongoDB做查询,然后将所有查到的文档写入磁盘。
缺点:
--使用普通的查询机制,所以产生的备份不一定是服务器数据的实时快照
--会对其它客户端的性能产生不利影响
mongorestore则是一个根据mongodump的备份来恢复数据库的工具。
3)fsync和锁
fsync命令强制服务器将所有缓冲区写入磁盘,还可以选择上锁阻止对数据库的进一步写入,知道释放锁为止。结合fsysnc,锁和mongodump可以获得数据目录的实时快照。
//清空缓存,加写入锁 db.runCommand({"fsync": 1, "lock": 1}); //备份 ... //解锁 db.$cmd.sys.unlock.findOne(); //确保已经解锁 db.currentOp();
4)从属备份
当以复制的方式运行MongoDB时,从服务器的数据几乎与主服务器同步。因为不在乎从属服务器的性能或是能不能读写,于是就能随意选择上面的3种备份方式。
5)修复
--通过repair选项启动MongoDB来修复所有数据库
原理:将所有的文档导出然后马上导入,忽略那些无效的文档,重建索引。
修复过程存在空间的回收,能起到压缩数据的作用。
--通过db.repairDatabase()来修复运行中的数据库
注:修复损毁的数据是不得已的最后一招。尽可能地稳妥地停掉服务器,利用复制功能实现故障恢复,经常做备份,这些才是最有效的管理数据的手段。