本文介绍一下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.confmongodb.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

禁用TransparentHugepages

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)    # 查看集合返回一条数据