摘要
下载和解压 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/mongodbvi 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命令会报出未验证的提示:
进入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配置