简介
翻历史笔记的时候找到的,21年整理的,趁着本次系统性梳理笔记,搬到CSDN上。
解压
下好MongoDB的压缩包,比如我下的是mongodb-linux-x86_64-3.4.2.tgz找好路径,我是都放在/software目录下。
然后进入上面的目录,解压:
tar -zxvf -C .
然后我们就有了一个/software/mongodb-xxx文件夹,之后的配置都是在这个文件夹下进行
创建配置文件
MongoDB有些麻烦,我看网上说的,它需要手动创建几个配置文件,包括数据库文件夹、日志文件夹等,如果不创建,第一次运行会报错,因为MongoDB不会自动创建这些文件夹。
首先创建数据库文件夹,用来放数据库信息的。
cd /software/mongodb-xxx
mkdir data/
然后创建日志文件夹:
cd /software/mongodb-xxx
mkdir logs/
最后创建主配置文件夹与主配置文件:
cd /software/mongodb-xxx
mkdir etc/
cd etc/
vi mongodb.conf
然后填充主配置文件,在这个文件里为MongoDB提供各种配置文件:
dbpath=/software/mongodb-xxx/data
logpath=/software/mongodb-xxx/logs/mongodb.log
port=27017
fork=truejournal=false
storageEngine=mmapv1
参数定义后续再说。
27017应该是MongoDB的默认监听端口。
第一次启动
MongoDB安装好第一次启动,是不需要密码的,这时候也没有任何用户,我们可以使用以下命令启动MongoDB:
./mongod -f /software/mongodb-xxx/mongodb.conf
启动后,我们需要进入MongoDB后台,添加管理用户,(MongoDB里没有无敌用户root这一角色,只有一个能管理用户的用户角色,叫userAdminAnyDatabase)。
首先进入MongoDB shell(进入安装文件夹的bin目录下):
mongo
然后在内置的MongoDB交互界面中,输入以下命令,创建用户:
use admin
db.createUser( {user: "wadmin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]});
成功后,会看到,
代表着用户创建完成。以上是我从参考文献1中的盗图,因为安装过程中我没有截图
用户创建完成后,你可以使用show users或者**db.system.users.find()**来查看已有用户。
添加完管理用户后,你需要关闭MongoDB,基于用户名和密码重新启动MongoDB,注意应该是在交互界面中使用**db.shutdownServer()**关闭,不要使用kill直接杀掉MongoDB进程。(如果这样做了,请去data/db目录下删除mongo.lock文件)
然后修改配置文件,在里面添加:
auth=true
重新启动MongoDB:
./mongod -f /software/mongodb-xxx/mongodb.conf
进入Mongo shell:
./mongo
重新登录admin数据库,并进行用户身份验证:
use admin
db.auth("wadmin", "123456")
返回1则表示认证成功。
添加环境变量
把mongod路径添加到系统路径,把mongo做一个软链接
问题
有个小问题,执行db.shutdownServer()来关闭MongoDB服务的时候,会提示报错:
解决方法是为当前用户添加权限:
db.updateUser(
"wadmin",
{
roles : [
{"role" : "userAdminAnyDatabase","db" : "admin"},
{"role" : "dbOwner","db" : "admin"}, {"role" : "clusterAdmin", "db": "admin"}
]
}
)
然后再shutdownServer(),出现上面提示就正常了。
或者使用killall MongoD来关闭也可以。
然后重新启动。
客户端与服务器端的版本问题
正常来讲,MongoDB是向下兼容的,也就是说支持客户端版本高于服务器端版本,但是反之如果客户端版本低的话,可能会出问题。
密码不能包含特殊字符
否则有可能会报"SASL authentication step: Authentication failed"
参考文献:
监控MongoDB运行状态
想验证MongoDB是否启动,可以输入命令:
lsof -i :27017
检测端口是否已经在使用中。
常用命令
show databases; # 展示当前已有数据库
use db_name; # 切换到指定数据库
show users; # 显示当前数据库下所有账户
db.system.users.find().pretty(); # 显示当前数据库下所有账户(详细信息,含认证方式等)
db.dropUser("用户名"); # 删除指定用户
quit(); # 退出数据库后台,即Mongo shell
exit; # 功能同上
db; # 显示当前使用的数据库
其他
验证机制
MongoDB在登录的时候有几套密码验证机制:
- MONGODB-CR:这个从4.0版本开始就已经废除了(也有说3.6开始就被弃用的);
- MONGODB-X509:用于TLS/SSL证书身份验证
- SCRAM-SHA-256:使用SHA-256 哈希函数加密,并且需要将
featureCompatibilityVersion
设置为4才可以使用; - SCRAM-SHA-1:使用SHA-1 哈希函数加密,3.0版本后默认加密方式。
需要注意,只有在数据库启动时才能指定该参数!
mongod --setParameter authenticationMechanisms=PLAIN,SCRAM-SHA-256 --auth
如何查看你的当前启动的MongoDB是什么验证方式呢?
use admin
db.system.version.findOne({"_id":"authSchema"})
- 值为3表示:MONGODB-CR
- 值为5表示:SCRAM-SHA-1
示例
mongoexport -h 127.0.0.1:27017 -u xxx -p xxx --db volcano --collection content --out temp.csv --authenticationDatabase=volcano --type=csv -f "_id,sourceId,coverImage.0.code"
如果需要导出csv文件的话,一定要指定–type=csv,否则仍默认导出json;