本文介绍一下MongoDB的安装方法,本地环境为Ubuntu 16.04,其他环境有细微区别,请参照官方文档修改。
官方文档:https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/
安装Mongdb
- 导入包管理系统公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
- 创建 MongoDB 的列表文件
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
由于国外源下载很慢,这里可以换成阿里源
echo "deb [ arch=amd64,arm64 ] http://mirrors.aliyun.com/mongodb/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
- 更新本地数据包
sudo apt-get update
- 安装 MongoDB 软件包
sudo apt-get install -y mongodb-org
启动及使用
启动命令:
$ sudo service mongod start # 启动
$ sudo service mongod stop # 关闭
$ mongod #启动服务端
$ mongo #启动客户端
配置目录:/etc/mongodb.conf
控制脚本:/etc/init.d/mongodb
数据目录:/var/lib/mongodb
日志目录:/var/log/mongodb
关于配置文件的坑
mongdb在**/etc下有两个配置文件,分别为:mongod.conf和mongodb.conf**。 两个配置文件差不多,区别为mongod.conf用的yaml语法格式。 启动脚本默认使用的mongodb.conf。 如果想修改成默认使用mongod.conf,方法如下:
❯ sudo vim /etc/init.d/mongodb
CONF=/etc/mongodb.conf
修改为:
CONF=/etc/mongod.conf
然后执行:
❯ systemctl daemon-reload
❯ sudo service mongodb restart
禁用Transparent Hugepages
Transparent Huge Pages (THP)是一种Linux内存管理机制,减少了Translation Lookaside Buffer (TLB)使用larger memory pages时的寻址开销。 但是数据库系统通常在使用THP的时候性能低下,因为它们倾向于稀疏而非连续的内存访问模式。你应该再Linux主机上禁用THP以确保MongoDB具备最佳性能。
sudo sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
sudo sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
sudo /etc/init.d/mongodb restart
用户验证和远程访问
- 打开mongodb客户端shell,创建超级用户admin
# sudo mongo
> use admin
> db.createUser({ user: "admin", pwd: "123456", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
- 修改配置文件 sudo vim /etc/mongod.conf
# 原配置 bindIp: 127.0.0.1
# 修改为 bindIp: 0.0.0.0 或者 bindIp: 127.0.0.1, x.x.x.x
# 添加
security:
authorization: enabled # 开启用户验证
- 为其他数据库单独创建用户
# sudo mongo
> use admin # 进入admin数据库
> db.auth("admin", "123456") # 登录admin超级用户
> use testdatabase # 进入test数据库
> db.createUser({ user: "test", pwd: "123456", roles: [{ role: "dbOwner", db: "testdatabase" }] }) # 为test数据库创建test用户
> show users # 检查用户
- 远程连接命令
mongo x.x.x.x:27017/testdatabase -u test -p 123456
- 基础命令:
use batabase # 进入指定数据库
db.auth('xxx', 'xxxx') # 登录
show dbs # 查看所有数据库,前提是有权限
show users # 查看用户信息
show collections # 查看集合
show tables # 同上
db.proxy.find().limit(1) # 查看集合返回一条数据