0%

MongoDB安装配置

下载和解压

1
2
3
4
cd /usr/local/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.2.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.0.2.tgz
mv mongodb-linux-x86_64-rhel70-4.0.2 mongodb

创建目录

创建日志目录和数据文件目录

1
2
3
mkdir -p /usr/local/mongodb/data/{logs,db}
touch mongodb.conf
touch data/logs/mongodb.log

启动MongoDB

启动MongoDB有2种方式,一是直接指定配置参数,二是指定配置文件。
创建一个文件mongodb.conf,填写下列项:

1
2
3
4
5
6
7
port=27899	#端口号(默认的端口号是27017,这里修改也是为了安全性)
dbpath=/usr/local/mongodb/data/db #数据目录(指向刚才创建的数据文件目录)
logpath=/usr/local/mongodb/data/logs/mongodb.log #日志目录(指向刚才创建的日志目录)
fork=true #设置后台运行
logappend=true #日志输出方式(写日志的模式:设置为true为追加。默认是覆盖。如果未指定此设置,启动时MongoDB的将覆盖现有的日志文件。)
auth=true #开启认证(默认是flase,不需要认证,开启认证是为了安全性)
bind_ip = 0.0.0.0 #开启外网访问

关闭防火墙

1
systemctl stop firewalld

启动和终止
进入/usr/local/mongodb/bin/目录下,启动MongoDB

1
2
cd /usr/local/mongodb/bin/
./bin/mongod --config mongodb.conf

如果启动成功,你会看到以下内容:

1
2
3
4
2018-08-31T09:30:19.171+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
about to fork child process, waiting until server is ready for connections.
forked process: 16071
child process started successfully, parent exiting

你可以通过ps aux |grep mongodb命令查看mongodb进程是否开启

进入终端操作数据库

1
2
cd /usr/local/mongodb/bin/
./bin/mongo --port=27017

这里说明一下,因为你的conf配置文件的端口改成了27899,所以这里启动终端要指定端口号,如果是27017默认端口号,则不需要指定,直接./mongo就可以进入交互控制台,接着你输入show dbs,就会看到以下默认集合:

1
2
3
4
5
> show dbs

admin 0.000GB
config 0.000GB
local 0.000GB

给MongoDB开启密码访问

MongoDB 默认是没有开启安全认证的,对于部署在云上就显得及其不安全,下面我们为mongodb的admin数据库创建用户。

MongoDB数据库有以下特点:

  • 没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
  • 切换到admin数据库,添加的账号才是管理员账号。
  • 用户只能在用户所在数据库登录,包括管理员账号。
  • 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较特别。

使用use admin切换到admin数据库

1
2
3
> use admin

switched to db admin

使用db.createUser()函数在admin数据库下创建用户,老版本的MongodDB是db.addUser()函数,这里注意一下,因为网上很多没有指明版本

1
2
3
4
5
6
7
8
9
10
11
> db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}

我们看到已经成功在admin下创建了一个用户名为root,密码为123456的用户

userAdminAnyDatabase:授予在所有数据库上管理User的权限-意思是可以在所有的数据库管理User,但是没有操作权利,只有你在那个数据库验证了User,然后才能去操作数据库的读写。

现在我们成功的创建了用户和密码,下面请将mongodb.conf文件中的开启安全认证项修改为true

1
2
cd /usr/local/src/mongodb
vi mongodb.conf

修改文件,文件最后呈现以下样子

1
2
3
4
5
6
7
dbpath = /usr/local/mongodb/data/db
logpath = /usr/local/mongodb/data/logs/mongodb.log
port = 27017
fork = true
logappend=true
auth = true
bind_ip = 0.0.0.0

然后找到MongoDB进程,先kill掉,再重启

1
2
cd bin
./mongod --config mongodb.conf

打开MongoDB交互台,使用show dbs命令会报出未验证的提示:

1
./mongo --port=27017

进入MongoDB交互台

1
2
3
4
5
6
7
8
9
10
11
12
13
> show dbs

2018-07-20T11:09:51.770+0800 E QUERY [js] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "command listDatabases requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:865:19
shellHelper@src/mongo/shell/utils.js:755:15
@(shellhelp2):1:1

我们可以看到结果显示失败未验证,说明我们刚才开启MongoDB密码登录成功,下面我们需要验证,首先切换到admin数据库下,也就是说,验证步骤必须在admin数据库下面进行

1
2
3
> use admin

switched to db admin
1
2
3
> show collections

Warning: unable to run listCollections, attempting to approximate collection names parsing connectionStatus
1
2
3
> db.auth("root","123456")

1
1
2
3
4
5
6
7
> show dbs

admin 0.000GB

config 0.000GB

local 0.000GB

db.auth()函数是验证方法,可以看到显示结果1表示成功验证,这个时候我们再show dbs,就成功显示了。 这个时候我们就可以对数据库任意操作了。

将MongoDB添加到systemctl

创建Mongo服务

1
vi /usr/lib/systemd/system/mongodb.service
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=MongoDB Service
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重载systemctll配置

1
systemctl daemon-reload
-------------    本文结束  感谢您的阅读    -------------
请作者一杯咖啡。