1、系统准备
a) redhat或cnetos6.2以上系统 b) 系统开发包完整 c) ip地址和hosts文件解析正常 d) iptables防火墙&SElinux关闭 e) 关闭大页内存机制 ######################################################################## root用户下 在vi /etc/rc.local最后添加如下代码 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi chmod +x /etc/rc.d/rc.local 其他系统关闭参照官方文档: https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
为什么要关闭?
Transparent Huge Pages (THP) is a Linux memory management system
that reduces the overhead of Translation Lookaside Buffer (TLB)
lookups on machines with large amounts of memory by using larger memory pages.
However, database workloads often perform poorly with THP,
because they tend to have sparse rather than contiguous memory access patterns.
You should disable THP on Linux machines to ensure best performance with MongoDB.
透明的大页(THP)是一个Linux内存管理系统,通过使用更大的内存页,可以减少对具有大量内存的机器的翻译查找缓冲区(TLB)查找的开销。然而,数据库工作负载通常在THP上表现不佳,因为它们往往具有稀疏而非连续的内存访问模式。您应该在Linux机器上禁用THP,以确保MongoDB的最佳性能。
2、mongodb安装
创建所需用户和组
groupadd -g 800 mongod useradd -u 801 -g mongod mongod passwd mongod passwd 123
创建mongodb所需目录结构
mkdir -p /application/mongodb/bin mkdir -p /application/mongodb/conf mkdir -p /application/mongodb/log mkdir -p /application/mongodb/data
上传并解压软件到指定位置
mongodb-linux-x86_64-3.2.8.tgz tar xf mongodb-linux-x86_64-3.2.8.tgz cd mongodb-linux-x86_64-3.2.8/bin/ cp * /application/mongodb/bin
设置目录结构权限
chown -R mongod:mongod /application/mongodb
设置用户环境变量
su - mongod echo 'export PATH=/application/mongodb/bin:$PATH' >> .bash_profile source .bash_profile
3、启动mongodb
mongod --dbpath=/application/mongodb/data --logpath=/application/mongodb/log/mongodb.log --port=27017 --logappend --fork 注: $ mongod --help --dbpath:数据存放路径 --logpath:日志文件路径 --logappend:日志输出方式 --port:启用端口号 --fork:在后台运行 --auth:是否需要验证权限登录(用户名和密码) --bind_ip:限制访问的ip
启动monogodb的脚本
#!/bin/bash # #chkconfig: 2345 80 90 #description:mongodb MONGODIR=/application/mongodb MONGOD=$MONGODIR/bin/mongod MONGOCONF=$MONGODIR/conf/mongodb1.conf start() { su - mongod -c "$MONGOD -f $MONGOCONF" } stop() { su - mongod -c "$MONGOD -f $MONGOCONF --shutdown" } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 2 start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac
4、登录mongodb
如果你不带任何参数运行 mongo , mongo shell将尝试连接运行在``localhost``上端口号为``27017``的MongoDB实例。
[mongod@lnmp ~]$ mongo MongoDB shell version: 3.2.8 connecting to: test >
5、使用配置文件
方法1:
#编辑配置文件 vim /application/mongodb/conf/mongodb.conf logpath=/application/mongodb/log/mongodb.log dbpath=/application/mongodb/data port=27017 logappend=1 fork=1 #启动 mongod -f /application/mongodb/conf/mongodb.conf #关闭 mongod -f /application/mongodb/conf/mongodb.conf --shutdown
方法2:建议
#编辑配置文件 vim /application/mongodb/conf/mongodb1.conf systemLog: destination: file path: "/application/mongodb/log/mongod.log" logAppend: true storage: journal: enabled: true dbPath: "/application/mongodb/data" processManagement: fork: true net: port: 27017
mongod -f /application/mongodb/conf/mongodb1.conf
mongod -f /application/mongodb/conf/mongodb1.conf --shutdown
6、mongodb的关闭方式
方法1、kill
---kill进程形式 $ kill -2 PID 原理:-2表示向mongod进程发送SIGINT信号。 或 $ kill -4 PID 原理:-4表示向mognod进程发送SIGTERM信号。
注:mongod进程收到SIGINT信号或者SIGTERM信号,会做一些处理
方法2、自带模式
admin> db.shutdownServer() 或 admin> db.adminCommand({shutdown:1}) 或 $ mongod -f mongodb.conf --shutdown killing process with pid: 1621
!!!切记kill -9 > 数据库直接关闭 > 数据丢失 > 数据文件损失 > 修复数据库(成本高,有风险)
7 基本操作:
help 查看帮助
db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help help keys key shortcuts help misc misc things to know help mr mapreduce show dbs show database names show collections show collections in current database show users show users in current database show profile show most recent system.profile entries with time >= 1ms show logs show the accessible logger names show log [name] prints out the last segment of log in memory, 'global' is default use <db_name> set current database db.foo.find() list objects in collection foo db.foo.find( { a : 1 } ) list objects in foo where a == 1 it result of the last line evaluated; use to further iterate DBQuery.shellBatchSize = x set default number of items to display on shell exit quit the mongo shell
查看当前db版本
> db.version() 3.2.8
显示当前数据库
> db
test
> db.getName()
test
> show dbs local 0.000GB
切换数据库
> use local
switched to db local
显示当前数据库状态
> db.stats() { "db" : "local", "collections" : 1, "objects" : 7, "avgObjSize" : 1466, "dataSize" : 10262, "storageSize" : 36864, "numExtents" : 0, "indexes" : 1, "indexSize" : 36864, "ok" : 1 }
查看当前数据库的连接机器地址
> db.getMongo() connection to 127.0.0.1
创建数据库
当使用use的时候,系统就会自动创建一个数据库。如果use之后没有创建任何集合。系统就会删除这个数据库。 > use anyux switched to db anyux
删除数据库
如果没有选择任何数据库,会删除默认的test数据库 > db.dropDatabase() { "ok" : 1 } > show dbs; local 0.000GB
创建集合
方法1:
> use anyux; switched to db anyux #相当于use anyux ,不同的是(从mysql关系型数据库角度解释),在mongodb中 anyux允许未创建情况下 use anyux,在创建数据表后,即创建了anyux,否则anyux不会创建 > db.createCollection('a'); #创建集合a,a相当于mysql中的数据表 { "ok" : 1 } # 提示创建成功 > db.createCollection('b'); { "ok" : 1 } > show collections; a b
方法2 :
> db.c.insert({username:"mongodb"}) # 当插入一个文档的时候,一个集合就会自动创建。 WriteResult({ "nInserted" : 1 }) #成功写入文档 > show collections; #显示所有集合(数据表) a b c > db.c.find() #显示数据集合中所有数据,当前仅一条 { "_id" : ObjectId("5a4c9509e4140b0cf22df83e"), "username" : "mongodb" } > db.log.find().pretty(); # 格式化打印结果 { "_id" : ObjectId("5a4c962ce4140b0cf22df83f"), "uid" : 0, "name" : "mongodb", "age" : 6, "date" : ISODate("2018-01-03T08:37:00.214Z") } > db.c.drop() # 删除c集合 true > db.c.find() # c集合置空
批量插入数据
for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); } #查询集合中的记录数 db.log.find() #注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据 #设置每页显示数据的大小: #每页显示50条记录 DBQuery.shellBatchSize=50; #查看第1条记录 db.log.findOne() #查询总的记录数 db.log.count() #删除集合中所有记录 db.log.remove({}) #集合中数据的原始大小 db.log.dataSize() #集合中索引数据的原始大小 db.log.totalIndexSize() #集合中索引+数据压缩存储之后的大小 db.log.totalSize() #集合中数据压缩存储的大小 db.log.storageSize()
#mongo中文文档