Linux安装mongodb

本文详细介绍了如何在Linux上下载、解压MongoDB源码包,配置启动项、数据路径和日志,设置开机自启,以及如何给MongoDB配置权限,包括关闭或启用认证。还特别提到了PHP操作3.0以上版本MongoDB时的SCRAM-SHA-1认证问题及其解决方案。
摘要由CSDN通过智能技术生成

Linux安装mongodb

一、下载对应版本的源码包到自己用户家目录下

  1. 通过wget命令下载
[root@izwz9g32ih0kwhap9ij30uz ~]# pwd
/root
[root@izwz9g32ih0kwhap9ij30uz ~]# ll
total 383704
-rw-r--r-- 1 root root 104247844 Jan 16 13:55 go1.9.2.linux-amd64.tar.gz
drwxr-xr-x 7 root root      4096 Sep 13 15:53 oneinstack
-rw-r--r-- 1 root root 288637516 Sep 13 10:01 oneinstack-full.tar.gz
-rw-r--r-- 1 root root     11303 Sep 13 14:34 wget-log
[root@izwz9g32ih0kwhap9ij30uz ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.4.0.tgz

2.windows下下载,通过ftp上传到对应的目录下,上传过后文件列表

[root@izwz9g32ih0kwhap9ij30uz ~]# ll
total 481804
-rw-r--r-- 1 root root 104247844 Jan 16 13:55 go1.9.2.linux-amd64.tar.gz
-rw-r--r-- 1 root root 100452894 Apr 21  2017 mongodb-linux-x86_64-rhel62-4.4.0.tgz
drwxr-xr-x 7 root root      4096 Sep 13 15:53 oneinstack
-rw-r--r-- 1 root root 288637516 Sep 13 10:01 oneinstack-full.tar.gz
-rw-r--r-- 1 root root     11303 Sep 13 14:34 wget-log

二、解压源码包到安装目录下并新建相关文件

1、通过tar命令解压源码包

[root@izwz9g32ih0kwhap9ij30uz ~]# tar zxvf mongodb-linux-x86_64-rhel62-4.4.0.tgz
[root@izwz9g32ih0kwhap9ij30uz ~]# ll
total 481808
-rw-r--r-- 1 root root 104247844 Jan 16 13:55 go1.9.2.linux-amd64.tar.gz
drwxr-xr-x 3 root root      4096 Jan 24 17:05 mongodb-linux-x86_64-rhel62-4.4.0
-rw-r--r-- 1 root root 100452894 Apr 21  2017 mongodb-linux-x86_64-rhel62-4.4.0.tgz
drwxr-xr-x 7 root root      4096 Sep 13 15:53 oneinstack
-rw-r--r-- 1 root root 288637516 Sep 13 10:01 oneinstack-full.tar.gz
-rw-r--r-- 1 root root     11303 Sep 13 14:34 wget-log

2、重命名解压后源码包,并移动到对应的文件目录下(此目录自定义)

[root@izwz9g32ih0kwhap9ij30uz ~]# mv mongodb-linux-x86_64-rhel62-4.4.0 mongodb
[root@izwz9g32ih0kwhap9ij30uz ~]# mv mongodb /usr/local/

此时在/usr/local/下面就有mongodb的解压后的源码包

[root@izwz9g32ih0kwhap9ij30uz ~]# cd /usr/local/
[root@izwz9g32ih0kwhap9ij30uz local]# ll
total 84
drwxr-xr-x   7 root root 4096 Dec 29 15:20 aegis
drwxr-xr-x.  2 root root 4096 Sep 13 14:53 bin
drwxr-xr-x.  2 root root 4096 Nov  5  2016 etc
drwxr-xr-x.  2 root root 4096 Nov  5  2016 games
drwxr-xr-x   7 root root 4096 Sep 13 14:45 imagemagick
drwxr-xr-x. 11 root root 4096 Sep 13 14:53 include
drwxr-xr-x.  4 root root 4096 Sep 13 14:53 lib
drwxr-xr-x.  2 root root 4096 Nov  5  2016 lib64
drwxr-xr-x.  2 root root 4096 Nov  5  2016 libexec
drwxr-xr-x   3 root root 4096 Sep 13 14:31 man
drwxr-xr-x   5 root root 4096 Sep 13 14:49 memcached
drwxr-xr-x   3 root root 4096 Jan 24 17:05 mongodb
drwxr-xr-x  13 root root 4096 Sep 13 14:29 mysql
drwxr-xr-x  11 root root 4096 Sep 13 14:48 nginx
drwxr-xr-x   6 root root 4096 Sep 13 14:29 openssl
drwxr-xr-x   9 root root 4096 Sep 13 14:40 php
drwxr-xr-x   6 root root 4096 Sep 13 14:48 pureftpd
drwxr-xr-x   5 root root 4096 Sep 13 14:49 redis
drwxr-xr-x.  2 root root 4096 Nov  5  2016 sbin
drwxr-xr-x.  9 root root 4096 Sep 13 14:31 share
drwxr-xr-x.  2 root root 4096 Nov  5  2016 src

3、在/usr/local/mongodb新建文件夹db(用来存放mongodb数据)与logs(用来存放mongodb日志文件,次文件一定要是文件而不是文件夹),以上文件夹路劲以及文件名均可自定义

[root@izwz9g32ih0kwhap9ij30uz local]# cd mongodb/
[root@izwz9g32ih0kwhap9ij30uz mongodb]# mkdir db
[root@izwz9g32ih0kwhap9ij30uz mongodb]# touch logs
[root@izwz9g32ih0kwhap9ij30uz mongodb]# ll
total 128
drwxr-xr-x 2 root root  4096 Jan 24 17:05 bin
drwxr-xr-x 2 root root  4096 Jan 24 17:21 db
-rw-r--r-- 1 root root 34520 Apr 21  2017 GNU-AGPL-3.0
drwxr-xr-x 2 root root  4096 Jan 24 17:21 logs
-rw-r--r-- 1 root root 16726 Apr 21  2017 MPL-2
-rw-r--r-- 1 root root  1359 Apr 21  2017 README
-rw-r--r-- 1 root root 55625 Apr 21  2017 THIRD-PARTY-NOTICES

4、在/usr/local/mongodb/bin目录下新建mongodb.conf配置文件,配置内容如下

port=27017  //momgodb默认占用的端口
dbpath=/usr/local/mongodb/db   //数据库文件位置
logappend=true   //# 以追加方式写入日志
fork=true    //是否以守护进程方式运行
logpath=/usr/local/mongodb/logs   //日志文件位置,这些都是可以自定义修改的
nohttpinterface=true  //禁用http界面,默认为localhost:28017
#auth = true   //是否开启权限验证

特别提醒:以上文件都以root权限操控,不然在启动mongod服务,会读取不了对应的配置文件

三、启动mongodb服务并配置启动项

1、启动mongodb服务

[root@izwz9g32ih0kwhap9ij30uz bin]# ./mongod --config=/usr/local/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 28403
child process started successfully, parent exiting
[root@izwz9g32ih0kwhap9ij30uz mongodb]# ps -ef | grep mongodb
root     28403     1  1 15:51 ?        00:00:01 ./mongod --config=/usr/local/mongodb/mongodb.conf

2、设置为开机自启,并配置service服务.切换到/etc/init.d/目录下,新建文件mongodb,并编辑脚本类容

[root@izwz9g32ih0kwhap9ij30uz ~]# cd /etc/init.d/
[root@izwz9g32ih0kwhap9ij30uz init.d]# vim mongodb

mongodb文件内容如下:

#!/bin/sh
#
#chkconfig:2345 80 90
#description: mongodb

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

start() {
        /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
}
stop() {
        /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf --shutdown
}

case "$1" in
  start)
     start
     ;;
  stop)
     stop
     ;;
  restart)
     stop
     start
     ;;
   *)
  echo $"Usage: $0 {start|stop|restart}"
  exit 1
esac

3、使脚本生效(Linux下chkconfig命令详解,友情链接:https://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796873.html)

[root@izwz9g32ih0kwhap9ij30uz init.d]# chkconfig --add mongodb
[root@izwz9g32ih0kwhap9ij30uz init.d]# chmod +x  mongodb
[root@izwz9g32ih0kwhap9ij30uz init.d]# chkconfig mongodb on

4、利用service指令启动mongodb

[root@izwz9g32ih0kwhap9ij30uz init.d]# ps -ef | grep mongodb
root     28403     1  0 15:51 ?        00:00:17 ./mongod --config=/usr/local/mongodb/mongodb.conf
root     28836 28536  0 16:47 pts/1    00:00:00 grep --color mongodb
[root@izwz9g32ih0kwhap9ij30uz init.d]# service mongodb stop
killing process with pid: 28403
[root@izwz9g32ih0kwhap9ij30uz init.d]# service mongodb start
about to fork child process, waiting until server is ready for connections.
forked process: 28878
child process started successfully, parent exiting
[root@izwz9g32ih0kwhap9ij30uz init.d]# service mongodb
Usage: /etc/init.d/mongodb {start|stop|restart}
[root@izwz9g32ih0kwhap9ij30uz init.d]# 

四、给mongodb配置权限访问

1、关闭配置文件/usr/local/mongodb/bin/mongodb.conf里面的auth认证

#auth = true   //是否开启权限验证

2、使用命令行进入mongodb目录,输入mongo命令,进入mongodb客户端

[root@izwz9g32ih0kwhap9ij30uz bin]# ./mongo
MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.4.0
Server has startup warnings: 
2018-01-25T16:47:37.305+0800 I STORAGE  [initandlisten] 
2018-01-25T16:47:37.305+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-01-25T16:47:37.305+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-01-25T16:47:37.600+0800 I CONTROL  [initandlisten] 
2018-01-25T16:47:37.600+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-01-25T16:47:37.600+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-01-25T16:47:37.600+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-01-25T16:47:37.600+0800 I CONTROL  [initandlisten] 
> 

由于没有开启权限验证,所以有warming警告!

3、查看当前数据库情况,并新建一个管理员用户

> show dbs
admin  0.000GB
local  0.000GB
> use admin
switched to db admin
>  db.createUser({user:'root',pwd:'root',roles:[{role:'root',db:'admin'}]})
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}
> 
> show collections
system.users
system.version
> 

此时,存在两个集合,一个是用户集合,一个是系统自带的版本集合,分别查看集合里面的内容如下:

> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Ax14P7XjjOm8aLjKpjA0BQ==", "storedKey" : "wojyo+fR//1UHfyUZ+8Ry1fbYrg=", "serverKey" : "O6IQV9wtxRbJtuHM/1MBQOcWto0=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
> db.system.version.find()
{ "_id" : "featureCompatibilityVersion", "version" : "3.4" }
{ "_id" : "authSchema", "currentVersion" : 5 }
> 

4、开启权限认证并检测是否生效(取消配置文件里面的注释#auth=true),重启mongodb服务

[root@izwz9g32ih0kwhap9ij30uz init.d]# vim /usr/local/mongodb/bin/mongodb.conf 
[root@izwz9g32ih0kwhap9ij30uz init.d]# service mongodb restart

进入客户端操作数据库结果如下:

[root@izwz9g32ih0kwhap9ij30uz bin]# ./mongo
MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.4.0
> show dbs
2018-01-26T10:32:32.295+0800 E QUERY    [thread1] Error: listDatabases failed:{
	"ok" : 0,
	"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
	"code" : 13,
	"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:769:19
shellHelper@src/mongo/shell/utils.js:659:15
@(微拍堂业务梳理):1:1

报错根据说明,提示权限验证失败,说明权限生效,现在输入验证机制,操作如下:

> use admin
switched to db admin
> db.auth("admin","123456")
1
> show dbs
admin  0.000GB
local  0.000GB
> 

db.auth(“admin”,“123456”)返回1,说明验证通过,现在可以快乐的玩耍我们的mongodb数据库啦!

五、如果是php操作mongodb数据库,且mongbdb版本是3.0以上请注意:

在3.0版之后的Mongodb,shell中依旧可以使用上述方法验证,但是php认证一直失败,日志中会报错( Failed to authenticate myuser@userdb with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document),原来新版的mongodb加入了SCRAM-SHA-1校验方式,需要第三方工具配合进行验证。

下面给出具体解决办法:
首先关闭认证,修改system.version文档里面的authSchema版本为3,初始安装时候应该是5,命令行如下:

> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 
3 
> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

不过如果你现在开启认证,仍然会提示AuthenticationFailed MONGODB-CR credentials missing in the user document
原因是原来创建的用户已经使用了SCRAM-SHA-1认证方式

> use admin 
> db.auth('admin','123456')
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "Ax14P7XjjOm8aLjKpjA0BQ==", "storedKey" : "wojyo+fR//1UHfyUZ+8Ry1fbYrg=", "serverKey" : "O6IQV9wtxRbJtuHM/1MBQOcWto0=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }

解决方案是将原来的用户删掉,重新分配用户,步骤依照上面即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值