MongoDB的使用
mongod:
- mongo 是启动MongoDB shell客户端的命令
- mongod 是启动MongoDB数据库服务的命令,主要提供了三种启动方式:
1. 命令行方式直接启动
MongoDB默认的存储数据目录为/data/db(需要事先创建),默认端口27017,也可以修改成不同目录:
# 直接启动mongod,默认数据存储目在 /data/db python@ubuntu:~$ sudo mongod # 启动mongod,并指定数据存储目录(目录必须存在,且有读写权限) python@ubuntu:~$ sudo mongod --dbpath=/xxxxx/xxxxx
2. 配置文件方式启动
启动时加上-f参数,并指向配置文件即可,默认配置文件为/etc/mongodb.cnf,也可以自行编写配置文件并指定。
# 启动mongod,并按指定配置文件执行 python@ubuntu:~$ sudo mongod -f /etc/mongodb.cnf
3. 守护进程方式启动
- 启动
MongoDB提供了一种后台程序方式启动的选择,只需要加上—fork参数即可。但是注意:如果用到了--fork参数,就必须启用--logpath参数来指定log文件,这是强制的。
python@ubuntu:~$ sudo mongod --logpath=/data/db/mongodb.log --fork about to fork child process, waiting until server is ready for connections. forked process: xxxxx child process started successfully, parent exiting
- 关闭
如果使用--fork在后台运行mongdb服务,那么就要通过本机admin数据库向服务器发送shutdownServer()消息来关闭。
python@ubuntu:~$ mongo MongoDB shell version: 3.2.8 connecting to: test > use admin switched to db admin > db.shutdownServer() server should be down... 2017-05-16T22:34:22.923+0800 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed 2017-05-16T22:34:22.923+0800 W NETWORK [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused 2017-05-16T22:34:22.923+0800 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed >
3. 启用用户认证方式启动
如果之前未定义过用户,所以mongod将允许本地直接访问操作数据库将使用本地root权限,如果使用--auth参数启动,将启用MongoDB授权认证,即启用不同的用户对不同的数据库的操作权限。
也可以在配置文件mongod.conf中加入auth = true按第二种启动方式启动。
# 启动mongod,并启用用户认证 python@ubuntu:~$ sudo mongod --auth
# 启动mongo shell python@ubuntu:~$ mongo MongoDB shell version: 3.2.8 connecting to: test # 1. 切换admin数据库下 > use admin switched to db admin # 2. 创建一个拥有root权限的超级用户,拥有所有数据库的所有权限 # 用户名:python,密码:chuanzhi,角色权限:root(最高权限) > db.createUser({user : "python", pwd : "chuanzhi", roles : ["root"]}) Successfully added user: { "user" : "python", "roles" : [ "root" ] } # 3. 如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,可以不用认证权限并创建一个用户,但是当继续创建第二个用户时,会返回错误,若想继续创建用户则必须认证登录。 > db.createUser({user : "bigcat", pwd : "bigcat", roles : [{role : "read", db : "db_01"}, {role : "readWrite", db : "db_02"}]}) couldn't add user: not authorized on admin to execute command{ createUser: "bigcat", pwd: "xxx", roles: [ { role: "read", db: "db_01" }, { role: "readWrite", db: "db_02" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.createUser@src/mongo/shell/db.js:1267:15 # 4. 认证登录到python用户(第一次创建的用户) > db.auth("python","chuanzhi") 1 > # 5. 查看当前认证登录的用户信息 > show users { "_id" : "admin.python", "user" : "python", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] } > # 6. 认证登录成功,可以继续创建第二个用户 # 用户名:bigcat,密码:bigcat,角色权限:[对db_01 拥有读权限,对db_02拥有读/写权限] > db.createUser({user : "bigcat", pwd : "bigcat", roles : [{role : "read", db : "db_01"}, {role : "readWrite", db : "db_02"}]}) Successfully added user: { "user" : "bigcat", "roles" : [ { "role" : "read", "db" : "db_01" }, { "role" : "readWrite", "db" : "db_02" } ] } # 7. 查看当前数据库下所有的用户信息. > db.system.users.find() { "_id" : "admin.python", "user" : "python", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "y/3yPLzhDKa7cJ3Zd/8DXg==", "storedKey" : "9XaUqiUteEtFAfof3k+HJjevqCA=", "serverKey" : "YjIoUPl7HTHQZuklSFXXYpZB/U4=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "admin.bigcat", "user" : "bigcat", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "ZcCaT057Gz0WODuSx70Ncg==", "storedKey" : "pNYyLMPisTcYuUHMdR46vndteIo=", "serverKey" : "IOzB2pyBRyCgKTNNSf1wljsVxms=" } }, "roles" : [ { "role" : "read", "db" : "db_01" }, { "role" : "readWrite", "db" : "db_02" } ] } > # 8. 认证登录到 bigcat 用户 > db.auth("bigcat", "bigcat") 1 > # 9. 切换到 数据库db_01,读操作没有问题 > use db_01 switched to db db_01 > show collections > # 10. 切换到 数据库db_02,读操作没有问题 > use db_02 switched to db db_02 > show collections > # 11. 切换到 数据库db_03,读操作出现错误,bigcat用户在db_03数据库下没有相关权限 > use db_03 switched to db db_03 > show collections 2017-05-17T00:26:56.143+0800 E QUERY [thread1] Error: listCollections failed: { "ok" : 0, "errmsg" : "not authorized on db_03 to execute command { listCollections: 1.0, filter: {} }", "code" : 13 } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:773:1 DB.prototype.getCollectionInfos@src/mongo/shell/db.js:785:19 DB.prototype.getCollectionNames@src/mongo/shell/db.js:796:16 shellHelper.show@src/mongo/shell/utils.js:754:9 shellHelper@src/mongo/shell/utils.js:651:15 @(shellhelp2):1:1 > # 12. 认证登录到python用户下 > db.auth("python", "chuanzhi") 1 > # 13. 删除bigcat用户 > db.dropUser("bigcat") true > # 14. 尝试认证登录bigcat失败 > db.auth("bigcat", "bigcat") Error: Authentication failed. 0 > # 15. 退出mongo shell > exit bye python@ubuntu:~$
参考阅读:[http://www.mongoing.com/docs/tutorial/enable-authentication.html)
mongod部分参数说明:
dbpath:数据文件存放路径。每个数据库会在其中创建一个子目录,防止同一个实例多次运行的mongod.lock也保存在次目录中。
logpath:错误日志文件
auth:用户认证
logappend:错误日志采用追加模式(默认覆写模式)
bind_ip:对外服务的绑定ip,一般设置为空,及绑定在本机所有可用ip上。如有需要可以单独绑定。
port:对外服务端口。Web管理端口在这个port的基础上+1000。
fork:以后台Daemon形式运行服务。
journal:开启日志功能,通过保存操作日志来降低单机故障的恢复时间。
syncdelay:系统同步刷新磁盘的时间,单位为秒,默认时60秒。
directoryperdb:每个db存放在单独的目录中,建议设置该参数。
repairpath:执行repair时的临时目录。如果没有开启journal,异常down机后重启,必须执行repair操作。
在源代码中,mongod的参数分为一般参数,windows参数,replication参数,replica set参数以及隐含参数。上面列举的时一般参数。
mongod的参数中,没有设置内存大小的相关参数,因为MongoDB使用os mmap机制来缓存数据文件数据,自身目前不提供缓存机制。mmap在数据量不超过内存时效率很高,但是数据超过内存后,写入的性能不太稳定。
MongoDB 统计信息:
要获得关于MongoDB的服务器统计,需要在MongoDB客户端键入命令db.stats()。这将显示数据库名称,收集和数据库中的文档信息。输出的命令如下所示
如下:
"db" : "test" ,表示当前是针对"test"这个数据库的描述。想要查看其他数据库,可以先运行$ use datbasename "collections" : 3,表示当前数据库有多少个collections.可以通过运行show collections查看当前数据库具体有哪些collection. "objects" : 267,表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值,并不是非常精确。 "avgObjSize" : 623.2322097378277,表示每行数据是大小,也是估计值,单位是bytes "dataSize" : 16640,表示当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes "storageSize" : 110592,表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。 "numExtents" : 0,没有什么真实意义 "indexes" : 2 ,表示system.indexes表数据行数。 "indexSize" : 53248,表示索引占有磁盘大小。单位是bytes "ok" : 1,表示服务器正常
本文作者享有著作权,最终解释权归本文作者所有,未经允许不得私自转载
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
排序算法的python实现
本文所有的排序方法都在列表上进行操作,首先定义交换任意两项位置的函数swap。 def swap (x,i,j): """ 交换x的i,j位置元素 """ temp = x[i] x[i] = x[j] x[j] = temp 1、选择排序 排序算法的逻辑非常简单,首先搜索整个列表,找到最小项的位置,如果该位置不是列表的第1项,就交换这两个位置的元素。然后从列表的第2个元素开始,重复上述过程,直到算法达到整个过程的最后一个位置,图形解释如下 代码如下 def selectionSort (x): i = 0 while i < len(x) - 1 : minindex = i j = i + 1 while j < len(x) : if x[minindex] > x[j]: minindex = j j+= 1 if minindex
- 下一篇
17个Python小窍门
python中相对不常见却很实用的小窍门。 空谈不如来码代码吧: 交换变量值 给列表元素创建新的分隔符 找列表中出现次数最多的元素 核对两个字符是否为回文 反向输出字符串 反向输出列表 转置2维数组 链式比较 我刚整理了一套2018最新的0基础入门和进阶教程,无私分享,加Python学习q u n:227-435-450即可获取,内附:开发工具和安装包,以及系统学习路线图 函数的链式写法 复制列表 字典的添加 对字典的值排序 for else结构 将列表转换为逗号分隔 字典的合并 找列表中最大、最小值下标 从列表中删除重复项 如果你觉得我有需改进的地方或者有其他建议请评论,我会继续更新这个博客的。 博客中的大多数的窍门都是我从PyTricks和一些其他博客找到的。 谢谢你的阅读,如果喜欢此文请点个赞吧
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境