145. MongoDB 安装部署&实战操作

1.接上一篇博文整理—》

2. 安装部署

2.1 系统准备

1)redhat或centos6.2以上系统
(2)系统开发包完整
(3)ip地址和hosts文件解析正常
(4)iptables防火墙&SElinux关闭
(5)关闭大页内存机制
########################################################################
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
        
cat  /sys/kernel/mm/transparent_hugepage/enabled        
cat /sys/kernel/mm/transparent_hugepage/defrag  
其他系统关闭参照官方文档:   

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. 

2.2 mongodb安装

2.2.1 创建所需用户和组

useradd mongod
passwd mongod

2.2.2 创建mongodb所需目录结构

mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data

2.2.3 上传并解压软件到指定位置

[root@db01 data]# cd   /data
[root@db01 data]# tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz 
[root@db01 data]#  cp -r /data/mongodb-linux-x86_64-rhel70-3.6.12/bin/ /mongodb

2.2.4 设置目录结构权限

chown -R mongod:mongod /mongodb

2.2.5 设置用户环境变量

su - mongod
vi .bash_profile
export PATH=/mongodb/bin:$PATH
source .bash_profile

2.2.6 启动mongodb

mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork 
    
[mongod@db01 ~]$ mongod --version
db version v3.6.12
git version: c2b9acad0248ca06b14ef1640734b5d0595b55f1
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel70
    distarch: x86_64
    target_arch: x86_64    

2.2.7 登录mongodb

[mongod@db01 ~]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
about to fork child process, waiting until server is ready for connections.
forked process: 2233
child process started successfully, parent exiting
    
[mongod@db01 ~]$ lsof -i:27017
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  2233 mongod   11u  IPv4  25808      0t0  TCP localhost:27017 (LISTEN)    

2.2.8 使用配置文件

YAML模式

NOTE:
YAML does not support tab characters for indentation: use spaces instead.

--系统日志有关  
systemLog:
   destination: file        
   path: "/mongodb/log/mongodb.log"    --日志位置
   logAppend: true                     --日志以追加模式记录
  
--数据存储有关   
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data"            --数据路径的位置

-- 进程控制  
processManagement:
   fork: true                         --后台守护进程
   pidFilePath: <string>              --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中
    
--网络配置有关   
net:            
   bindIp: <ip>                       -- 监听地址
   port: <port>                       -- 端口号,默认不配置端口号,是27017
   
-- 安全验证有关配置      
security:
  authorization: enabled              --是否打开用户名密码验证
  
------------------以下是复制集与分片集群有关----------------------  

replication:
 oplogSizeMB: <NUM>
 replSetName: "<REPSETNAME>"
 secondaryIndexPrefetch: "all"
 
sharding:
   clusterRole: <string>
   archiveMovedChunks: <boolean>
      
---for mongos only
replication:
   localPingThresholdMs: <int>

sharding:
   configDB: <string>
---
++++++++++++++++++++++
YAML例子
cat >  /mongodb/conf/mongo.conf <<EOF
systemLog:
   destination: file
   path: "/mongodb/log/mongodb.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/mongodb/data/"
processManagement:
   fork: true
net:
   port: 27017
   bindIp: 10.0.0.51,127.0.0.1
EOF
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf   

2.2.9 mongodb的关闭方式

[mongod@db01 ~]$ mongod -f /mongodb/conf/mongo.conf --shutdown
killing process with pid: 2233
[mongod@db01 ~]$ mongod -f /mongodb/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 2286
child process started successfully, parent exiting

2.3.0 mongodb 使用systemd管理

[root@db01 ~]# cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb 
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true  
[Install]
WantedBy=multi-user.target
EOF

[root@db01 ~]# systemctl restart mongod
[root@db01 ~]# systemctl stop mongod
[root@db01 ~]# systemctl start mongod

3、mongodb常用基本操作

3.0 mongodb 默认存在的库

test:登录时默认存在的库
管理MongoDB有关的系统库
admin库:系统预留库,MongoDB系统管理库
local库:本地预留库,存储关键日志
config库:MongoDB配置信息库

show databases/show dbs
show tables/show collections
use admin 
db/select database()

3.1 命令种类

3.1.1 db 对象相关命令

db.[TAB][TAB]
db.help()
db.cheng.[TAB][TAB]
db.cheng.help()

3.1.2 rs 复制集有关(replication set):

rs.[TAB][TAB]
rs.help()

3.1.3 sh 分片集群(sharding cluster)

sh.[TAB][TAB]
sh.help()

4. mongodb对象操作

mongo         mysql
库    ----->  库
集合  ----->  表
文档  ----->  数据行

4.1 库的操作

> use test
>db.dropDatabase()   
{ "dropped" : "test", "ok" : 1 }

4.2 集合的操作

app> db.createCollection('a')
{ "ok" : 1 }
app> db.createCollection('b')
方法2:当插入一个文档的时候,一个集合就会自动创建。

use cheng
db.test.insert({name:"zhangsan"})
db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
show tables;
db.stu.insert({id:102,name:"lisi"})
db.stu.insert({a:"b",c:"d"})
db.stu.insert({a:1,c:2})

4.3 文档操作

数据录入:
> for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
... Date()})}
WriteResult({ "nInserted" : 1 })

查询数据行数:
> db.log.count()
10000

全表查询:   
> db.log.find()
    
每页显示50条记录:
> DBQuery.shellBatchSize=50; 

按照条件查询
> db.log.find({uid:999})
{ "_id" : ObjectId("5e17d817ea0f8e1be4269a78"), "uid" : 999, "name" : "mongodb", "age" : 6, "date" : ISODate("2020-01-10T01:49:11.311Z") }
    
以标准的json格式显示数据
> db.log.find({uid:999}).pretty()
{
	"_id" : ObjectId("5e17d817ea0f8e1be4269a78"),
	"uid" : 999,
	"name" : "mongodb",
	"age" : 6,
	"date" : ISODate("2020-01-10T01:49:11.311Z")
}


删除集合中所有记录
> db.log.remove({})
    
按条件删除    
> db.log.remove({uid:999})
WriteResult({ "nRemoved" : 1 })
> db.log.find({uid:999})

4.3.1 查看集合存储信息

> db.log.totalSize()
696320 				//集合中索引+数据压缩存储之后的大小    

5. 用户及权限管理

5.1 注意

验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆。

对于管理员用户,必须在admin下创建.
1. 建用户时,use到的库,就是此用户的验证库
2. 登录时,必须明确指定验证库才能登录
3. 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
4. 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
5.3.6 版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录。

5.2 用户创建语法

use admin 
db.createUser
{
    user: "<name>",
    pwd: "<cleartext password>",
    roles: [
       { role: "<role>",
     db: "<database>" } | "<role>",
    ...
    ]
}

基本语法说明:
user:用户名
pwd:密码
roles:
    role:角色名
    db:作用对象 
role:root, readWrite,read   
验证数据库:
mongo -u cheng -p 123 10.0.0.51/cheng

5.3 用户管理例子

创建超级管理员:管理所有数据库(必须use admin再去创建)
$ mongo
use admin
> db.createUser(
... {
...     user: "root",
...     pwd: "root123",
...     roles: [ { role: "root", db: "admin" } ]
... }
... )
Successfully added user: {
	"user" : "root",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

5.4 验证用户

> db.auth('root','root123')
1

5.5 配置文件中,加入以下配置

[mongod@db01 ~]$ vim /mongodb/conf/mongo.conf  加最后边
security:
  authorization: enabled

5.6 重启mongodb

[mongod@db01 ~]$ mongod -f /mongodb/conf/mongo.conf --shutdown 
killing process with pid: 2717
[mongod@db01 ~]$ mongod -f /mongodb/conf/mongo.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 2868
child process started successfully, parent exiting

5.7 登录验证

mongo -uroot -proot123  admin
mongo -uroot -proot123  10.0.0.51/admin

或者
mongo
use admin
db.auth('root','root123')

5.8 查看用户:

use admin
db.system.users.find().pretty()

5.9 创建应用用户

[mongod@db01 ~]$ mongo -uroot -proot123 --host=10.0.0.51 --port=27017 admin
use cheng
> db.createUser(
...     {
...         user: "app01",
...         pwd: "app01",
...         roles: [ { role: "readWrite" , db: "cheng" } ]
...     }
... )

Successfully added user: {
	"user" : "app01",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "cheng"
		}
	]
}

远程登录:
[mongod@db01 ~]$ mongo -uapp01 -papp01 10.0.0.51/cheng
MongoDB shell version v3.6.12
connecting to: mongodb://10.0.0.51:27017/cheng?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("0459de17-a9f3-4691-a1b5-351ecd4e37e3") }
MongoDB server version: 3.6.12
> 

5.10 查询mongodb中的用户信息

[mongod@db01 ~]$ mongo -uroot -proot123 
> use admin
switched to db admin

> db.system.users.find().pretty()
{
	"_id" : "admin.root",
	"user" : "root",
	"db" : "admin",
	"credentials" : {
		"SCRAM-SHA-1" : {
			"iterationCount" : 10000,
			"salt" : "RYTp8T4pDQdkmx9OeN9o4Q==",
			"storedKey" : "KsWW+xILkuXru2UKvQNTwGRhl2c=",
			"serverKey" : "4is9P5N8x7dw6yqmOwfzI3xDHmo="
		}
	},
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
{
	"_id" : "cheng.app01",
	"user" : "app01",
	"db" : "cheng",
	"credentials" : {
		"SCRAM-SHA-1" : {
			"iterationCount" : 10000,
			"salt" : "SjUWkgInUxxyba+Wv8Q5Yw==",
			"storedKey" : "3p2XWCzZiiadeLPnN1czQsKo1ok=",
			"serverKey" : "3M20fakCqSgUUi7FJY+LQwecsgc="
		}
	},
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "cheng"
		}
	]
}
> 

5.11 删除用户(root身份登录,use到验证库)

删除用户
db.createUser({user: "app02",pwd: "app02",roles: [ { role: "readWrite" , db: "cheng1" } ]})
mongo -uroot -proot123 10.0.0.51/admin
use cheng1
db.dropUser("app02")

5.12 用户管理注意事项

1. 建用户要有验证库,管理员admin,普通用户是要管理的库
2. 登录时,注意验证库
mongo -uapp01 -papp01 10.0.0.51:27017/cheng
3. 重点参数
[mongod@db01 ~]$ vim /mongodb/conf/mongo.conf 
net:
   port: 27017
   bindIp: 10.0.0.51,127.0.0.1
security:
   authorization: enabled

发布了148 篇原创文章 · 获赞 65 · 访问量 7590

猜你喜欢

转载自blog.csdn.net/chengyinwu/article/details/103922997
今日推荐