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的脚本




mongodb 安装测试 mongodb部署安装_mongodb 安装测试

mongodb 安装测试 mongodb部署安装_操作系统_02

#!/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


View Code


 

 

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 查看帮助




mongodb 安装测试 mongodb部署安装_mongodb 安装测试

mongodb 安装测试 mongodb部署安装_操作系统_02

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


View Code


查看当前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中文文档

http://www.mongoing.com/docs/