一、MongoDB的安装
1、下载
|
1
2
|
cd /data/packages
wget https:
//fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
|
2、解压
|
1
2
3
4
5
6
7
|
tar zxvf mongodb-linux-x86_64-rhel62-
3.2
.
9
.tgz
mv mongodb-linux-x86_64-rhel62-
3.2
.
9
/data/mongodb
cd /data/mongodb/
mkdir -p /data/mongodb/data #目录中创建一个存放数据文件的目录:
mkdir -p /data/mongodb/logs #目录中创建一个存放日志的目录:
touch /data/mongodb/logs/mongodb.log
cd bin/
|
3、编辑配置文件:
|
1
2
3
4
5
6
7
8
9
10
|
vim mongodb.conf 输入以下内容:
# idae - MongoDB config start -
2016
-
08
-
26
dbpath=/data/mongodb/data # 设置数据文件的存放目录
logpath=/data/mongodb/logs/mongodb.log # 设置日志文件的存放目录及其日志文件名
bind_ip=
0.0
.
0.0
port=
27017
# 设置端口号(默认的端口号是
27017
)
fork=
true
# 设置为以守护进程的方式运行,即在后台运行
nohttpinterface=
true
# idae - MongoDB config end -
2016
-
08
-
26
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
参数解释:
--dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的
5
%)。
--logappend 日志文件末尾添加,即使用追加的方式写日志
--journal 启用日志
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
--syncdelay 数据写入硬盘的时间(秒),
0
是不等待,直接写入
--notablescan 不允许表扫描
--maxConns 最大的并发连接数,默认
2000
--pidfilepath 指定进程文件,不指定则不产生进程文件
--bind_ip 绑定IP,绑定后只能绑定的IP访问服务
|
4、创建新的账号:
|
1
2
3
4
|
groupadd mongodb
useradd mongodb -g mongodb
chown -R mongodb:mongodb /data/mongodb
ln -s /data/mongodb/bin/mongo /usr/bin/mongo
|
5、启动:
|
1
|
/data/mongodb/bin/mongod --config /data/mongodb/bin/mongodb.conf
|
a.报错:/lib64/libc.so.6: version `GLIBC_2.14' not found ,原因是glibc版本太低,软件编译时使用了较高版本的glibc引起的
解决:http://www.cnblogs.com/gw811/p/3676856.html
b.报错:[main] Failed global initialization: BadValue: Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.
解决:设置下环境变量就好了: # export LC_ALL=C
-查看 mongodb 进程:
|
1
|
ps aux |grep mongodb
|
-查看 mongodb 服务的运行日志:
|
1
|
tail -100f /data/mongodb/logs/mongodb.log
|
-检查端口是否已被启动:
|
1
|
netstat -lanp | grep
27017
|
-杀死 mongodb 进程,即可关闭 mongodb 服务:
|
1
|
kill -
15
PID
|
6、设置开机自动启动mongodb
方法有二:
1、把这句话写到把 /etc/rc.local,即可开机启动。
|
1
|
echo /data/mongodb/bin/mongod --config /data/mongodb/bin/mongodb.conf >/etc/rc.d/rc.local
|
第二种:
2、将一个脚本放到/etc/init.d/
比如,命名为/etc/init.d/mongodb,则执行以下步骤即可:
1)要给它们赋予执行权限:
|
1
|
chmod +x /etc/init.d/mongodb
|
2)接着试一下是否可以启动、停止:
|
1
2
|
service mongodb start
service mongodb stop
|
3)最后设为开机启动:
|
1
|
chkconfig mongodb on
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/bin/bash
# mongod - Startup script
for
mongod
# chkconfig:
35
80
15
# description: Mongo is a scalable, document-oriented database.
# processname: mongod
# config: /data/mongodb/conf/mongod.conf
# pidfile: /var/run/mongo/mongo.pid
source /etc/rc.d/init.d/functions
# things from mongod.conf get there by mongod reading it
if
[ $(id -u) !=
"0"
]; then
echo
"Permission Denied! Please use root to run again!"
exit
1
fi
test -d /var/run/mongodb || (mkdir -p /var/run/mongodb ; chown mongod:mongod /var/run/mongodb)
# NOTE:
if
you change any OPTIONS here, you get what you pay
for
:
#
this
script assumes all options are in the config file.
CONFIGFILE=
"/data/mongodb/conf/mongodb.conf"
SYSCONFIG=
"/etc/sysconfig/mongod"
export PATH=$PATH:/data/mongodb/bin
DBPATH=`awk -F=
'/^dbpath/{print $2}'
"$CONFIGFILE"
`
OPTIONS=
" --config $CONFIGFILE"
mongod=
"/data/mongodb/bin/mongod"
echo
"db path is: "
$DBPATH
echo $mongod
MONGO_USER=mongodb
MONGO_GROUP=mongodb
[ -r
"$SYSCONFIG"
] && source
"$SYSCONFIG"
super
() {
su - $MONGO_USER -c
"PATH=$PATH::/data/mongodb/bin; $*"
}
start()
{
echo -n $
"Starting mongod: "
# daemon --user
"$MONGO_USER"
"numactl --interleave=all"
$mongod $OPTIONS
#daemon --user
"$MONGO_USER"
$mongod $OPTIONS
#
# su - $MONGO_USER -c
"$mongod $OPTIONS"
-m -p
# su - $MONGO_USER
$mongod $OPTIONS
#
super
$mongod $OPTIONS
echo $mongod$OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq
0
] && touch /var/lock/subsys/mongod
}
stop()
{
echo -n $
"Stopping mongod: "
killproc -p
"$DBPATH"
/mongod.lock -d
300
/data/mongodb/bin/mongod
RETVAL=$?
echo
[ $RETVAL -eq
0
] && rm -f /var/lock/subsys/mongod
}
restart () {
stop
start
}
ulimit -n
12000
RETVAL=
0
case
"$1"
in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
restart
;;
condrestart)
[ -f /var/lock/subsys/mongod ] && restart || :
;;
status)
status $mongod
RETVAL=$?
;;
*)
echo
"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
RETVAL=
1
esac
exit $RETVAL
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、用户授权和管理
1、进入mongodb的shell模式:
|
1
|
/usr/bin/mongo
|
查看数据库列表:
|
1
|
show dbs
|
查看当前db版本:
|
1
|
db.version();
|
2、增加管理员权限:
userAdminAnyDatabase 这个角色拥有分配角色和用户的权限,但没有查写的缺陷
root 这是超级管理员
readWrite 有读写权限
read 有读权限
进入shell模式:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/usr/bin/mongo
> use admin
//切换到admin数据库
> db.createUser(
... {
... user:
"root"
,
... pwd:
"test123"
,
... roles:[{role:
"root"
,db:
"admin"
}]
... }
... );
Successfully added user: {
"user"
:
"root"
,
"roles"
: [
{
"role"
:
"root"
,
"db"
:
"admin"
}
]
}
>
|
|
1
2
3
4
5
6
7
|
> db.createUser(
... {
... user: “mongoRoot”,
... pwd: “testMongoDB2016”,
... roles:[{role:”userAdminAnyDatabase”, db:”admin”}]
... }
... );
|
验证一下,在哪里注册用户的要去哪个db里认证:
|
1
|
db.auth(“mongoRoot”, “testMongoDB2016”)
|
此后可以用这个mongoRoot账号去创建某一数据库管理账号:
|
1
|
> db.createUser({user:
"test1"
,pwd:
"test123"
,roles:[{
"role"
:
"readWrite"
,
"db"
:
"test1"
}]})
|
但发现此时增加的账号不能在客户端登录,原因是mongodb版本错了:
先退出 mongod 服务
use admin
db.auth(“root”, “testMongoDB2016”)
db.shutdownServer()
再在无认证情况下打开 mongod
use admin
db.dropUser(“hhq163”)
db.system.version.update({ “_id”:”authSchema”},{$set:{“currentVersion”:3}})
db.createUser({user:”hhq163”,pwd:”test123456”,roles:[{“role”:”readWrite”,”db”:”admin”}]})
再以认证的形式启动mongodb
如果需要创建某一个新DB的账号:
需要在shell下执行:
use TestDB
db.createUser({user:”hhq163”,pwd:”test123456”,roles:[{“role”:”readWrite”,”db”:”TestDB”}]})
vim /usr/local/mongodb/bin/mongodb.conf
在文件末尾增加以下这一行:
auth=true
8、关闭数据库服务器:
use admin
db.shutdownServer()
如果开户安全认证,则要先认证:
use admin
db.auth(“root”, “testMongoDB2016”)
db.shutdownServer()