MongoDB基本使用

简介

MongoDB是一种面向文档的数据库管理系统,MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。

特点

  • 高可用性
  • 水平可伸缩性
  • 丰富的查询语言
  • 支持多个存储引擎

安装

系统环境

ip系统软件安装方式
192.168.253.101CentOS7.4MongoDB3.6二进制安装

1.关闭防火墙selinux

systemctl  stop firewalld 
setenforce  0

2.创建mongo用户

useradd   mongo 
echo "mongo" | passwd mongo --stdin

3.关闭hugepage大页内存

Transparent Huge Pages(THP)是一种Linux内存管理系统,通过使用更大的内存页面,可以减少具有大量内存的计算机上的Translation Lookaside Buffer(TLB)查找的开销。
但是,数据库工作负载通常在THP上表现不佳,因为它们往往具有稀疏而不是连续的内存访问模式。您应该在Linux机器上禁用THP以确保使用MongoDB获得最佳性能。

cat  /etc/init.d/disable-transparent-hugepages
#!/bin/bash
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    re='^[0-1]+$'
    if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
    then
      # RHEL 7
      echo 0  > ${thp_path}/khugepaged/defrag
    else
      # RHEL 6
      echo 'no' > ${thp_path}/khugepaged/defrag
    fi

    unset re
    unset thp_path
    ;;
esac

关闭大页内存

chmod 755 /etc/init.d/disable-transparent-hugepages  # 设置脚本权限
chkconfig --add disable-transparent-hugepages    # 设置开机启动
/etc/init.d/disable-transparent-hugepages  start  # 关闭内存大页

验证

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

都出现

always madvise [never]

表示成功关闭

4.安装MongoDB3.6

mkdir -p /mongodb/bin
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data
tar xf mongodb-linux-x86_64-rhel70-3.6.11.tgz
cp   mongodb-linux-x86_64-rhel70-3.6.11/bin/* /mongodb/bin/

5.创建配置文件

cat /mongodb/conf/mongodb.conf
processManagement:
   fork: true   # 在后台运行
net:
   bindIp: 192.168.253.101   # 监听的IP地址
   port: 27017     # 监听的端口地址
storage:
   dbPath: "/mongodb/data"    # 数据存放路径
systemLog:
   destination: file
   path: "/mongodb/log/mongodb.log"  # 日志位置
   logAppend: true   # 追加形式写日志
storage:
   journal:
      enabled: true 

修改权限

chown -R mongo:mongo /mongodb/

6. 启动MongoDB

su mongo
/mongodb/bin/mongod -f /mongodb/conf/mongodb.conf

命令行启动方式

/mongodb/bin/mongod --dbpath=/mongodb/data/ --logpath=/mongodb/log/mongodb.log --logappend --fork --bind_ip=192.168.253.101

登陆

/mongodb/bin/mongo 192.168.253.101

关闭

mongod -f mongodb.conf --shutdown

7.设置root用户

/mongodb/bin/mongo 192.168.253.101
> use admin
switched to db admin
> db.createUser(
... {
... user: "mongo",
... pwd: "mongo",
... roles: [ { role: "root", db: "admin" } ]
... })
Successfully added user: {
	"user" : "mongo",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

修改配置文件

processManagement:
  fork: true
net:
  bindIp: 192.168.253.101
  port: 27017
storage:
  dbPath: "/mongodb/data"
systemLog:
  destination: file
  path: "/mongodb/log/mongodb.log"
  logAppend: true
storage:
  journal:
     enabled: true
security:
   authorization: enabled   # 打开认证功能

重启服务

/mongodb/bin/mongod -f /mongodb/conf/mongodb.conf  --shutdown
/mongodb/bin/mongod -f /mongodb/conf/mongodb.conf 

登陆

/mongodb/bin/mongod -f /mongodb/conf/mongodb.conf 
> use admin
switched to db admin
> db.system.users.find({}).pretty()
{
	"_id" : "admin.mongo",
	"user" : "mongo",
	"db" : "admin",
	"credentials" : {
		"SCRAM-SHA-1" : {
			"iterationCount" : 10000,
			"salt" : "qSkat7Z8xmL+nf1XSvllMQ==",
			"storedKey" : "rk9y5zWRhLQDF0ATPvnzuzbQkR0=",
			"serverKey" : "zI7lpLqYU9NbI2Z7f/arjXWSCt4="
		}
	},
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

基本操作

  • 查看版本
db.version()  
  • 获取当前数据库名
db.getName()  
  • 查看所有数据库
 show dbs
  • 切换到admin数据库,如果数据库不存在则创建临时数据库,退出的时候如果临时创建的数据库没有创建任何集合,系统会自动删除这个数据库
use admin  
  • 查看当前数据库状态
db.stats()  
  • 查看当前数据库的监听地址
db.getMongo() 
  • 查询文档集合
db.collection.find()  
  • 删除数据库,如果没有指定数据库,默认删除test库
db.dropDatabase() 
  • 创建集合a
db.createCollection('a')  
  • 查看当前数据下的所有集合
show collections 
  • 获取当前数据下的所有集合名
db.getCollectionNames()  
  • 当插入一个文档的时候,一个集合就会自动创建
db.c.insert({username:"mongodb"}) 
  • 查看c集合的所有文档
db.c.find({}).pretty 
  • 查看c集合内username为"mongodb"的文档
db.c.find({username:"mongodb"}) 
  • 删除c集合
db.c.drop()  
  • 插入数据10000条数据
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
... Date()}); }
  • 统计文档数量
db.log.count()
  • 查询所有记录
db.log.find()

注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。

  • 设置每页显示数据的大小
> DBQuery.shellBatchSize=50  # 每页显示50条记录
50
> db.log.findOne() # 查看第1条记录
> db.log.count() # 查询总的记录数
  • 删除集合中的记录数
> db.log.remove({})   # 删除集合中所有记录
> db.log.distinct("name")   # 查询去掉当前集合中某列的重复数据
  • 查看集合存储信息
> db.log.stats()
> db.log.dataSize() //集合中数据的原始大小
> db.log.totalIndexSize() //集合中索引数据的原始大小
> db.log.totalSize() //集合中索引+数据压缩存储之后的大小
> db.log.storageSize() //集合中数据压缩存储的大小

用户管理

基本格式
{
  user: "<name>",   # 用户名
  pwd: "<cleartext password>",   # 密码
  customData: { <any information> },  # 任意内容,相当于备注
  roles: [      
    { role: "<role>",  # 内置常用的角色有root,dbAdmin,readWrite,read
    db: "<database>" } | "<role>", # 管理的数据库对象
...
]
}

#注:用户创建完成后需在配置文件打开auth验证并重启后生效。

创建数据库管理员用户
> use admin
> db.createUser(
{
  user: "admin",
  pwd: "admin",
  roles: [ 
    { role: "dbAdmin",
      db:'Admin'
     } ]
}
)
验证用户
db.auth('admin','admin')
删除用户
> db.dropUser("admin")

参考文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值