在ubuntu 18上安装MongoDB
本文介绍 MongoDB Community Edition 在 Ubuntu 下的安装和常见配置方法。文中操作基于 MongoDB Community Edition 4.2.2 和 Ubuntu 18.04 。对于不同的系统和版本,操作方式和方法可能会有不同。
基础安装
本节简单讲解在Ubuntu下 MongoDB 基本的安装步骤。
- 安装GPG公钥
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
- 添加APT源
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
- 重载本地包数据库
sudo apt-get update
- 安装mongoDB
sudo apt-get install -y mongodb-org
- 检查mongoDB包安装信息
apt list --installed mongodb*
正常情况下,可以看到以下信息
mongodb-org/bionic,now 4.2.2 amd64 [installed]
mongodb-org-mongos/bionic,now 4.2.2 amd64 [installed]
mongodb-org-server/bionic,now 4.2.2 amd64 [installed]
mongodb-org-shell/bionic,now 4.2.2 amd64 [installed]
mongodb-org-tools/bionic,now 4.2.2 amd64 [installed]
- 启动系统服务
sudo systemctl enable mongod.service
sudo systemctl start mongod.service
- 检查服务状态
systemctl status -l mongod.service
如果
mongod.service的状态不是active(running),可以根据systemctl status命令的输出和日志文件/var/log/mongodb/mongod.log来排查问题原因。
客户端连接
当 MongoDB 服务启动成功后,可以使用 MongoDB JavaScript Shell 客户端来访问数据库了:
mongo --host 127.0.0.1 --port 27017
默认配置下,MongoDB 监听本地localhost的27017端口。此时,启动 MongoDB JavaScript Shell 时也可以省略地址和端口参数。连接成功后就可以操作数据库了。比如查看现有的database:
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
安装操作详解
接下来会对安装过程做进一步讲解,基于这部分内容,可以对 MongoDB 的安装和基本配置进行部分自定义。
安装指定组件和版本
在一节内容中,可以看到当 MongoDB 的包安装完成后,可以看到多个组件被安装。这些组件分别是
| 包名 | 描述 |
|---|---|
| mongodb-org | 包含所有组件包的元包,安装此包会包含以下所有组件 |
| mongodb-org-server | MongoDB 服务器,主要是 mongod 进程程序和相关资源和脚本 |
| mongodb-org-mongos | mongos 进程,用于在 MongoDB 分片集群中将客户端请求分发到各服务节点 |
| mongodb-org-shell | MongoDB JavaScript Shell 客户端 |
| mongodb-org-tools | 其他 MongoDB 工具, mongoimport, bsondump, mongodump, mongoexport,mongofiles,mongorestore,mongostat,和mongotop |
可以根据需要安装指定的组件,比如只安装 MongoDB JavaScript Shell 来访问远程服务:
sudo apt install mongodb-org-shell
系统服务配置
当 MongoDB 服务安装完成后,会创建系统服务文件 /lib/systemd/system/mongod.service。可以根据需要修改此文件。
比如,服务文件里包含以下一些配置:
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
User和Group指定了启动 MongoDB 服务进程所使用的用户mongodb和同名用户组mongodb。这个用户和用户组是在安装 MongoDB 时自动创建的。可以在必要时指定为期望的值。当修改后,要注意同时修改相关目录和文件的权限。
ExecStart指定了启动服务进程的命令,可以看到这里显示指定了使用配置文件/etc/mongod.conf。可以修改这条配置项让数据库使用其他配置文件,也可以添加其他启动参数。
如果希望在同一台服务器上启动多个 MongoDB 服务,可以复制服务文件,并修改后启用。
如果是在启用服务之后对服务文件做了修改,需要重载配置再重启服务:
sudo systemctl daemon-reload
sudo systemctl restart mongod.service
基础配置
本节介绍一些 MongoDB 配置文件中常用的配置项。默认情况下,这些配置保存在文件/etc/mongod.conf中。当配置项修改后,需要重启服务才能生效。
指定监听地址和端口
默认情况下,非分片集群下的 MongoDB 监听 localhost 上的 27017端口。在没有显示指定配置文件时,这个是由配置文件中的 net.port和net.bindIp配置顶控制:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
这时, MongoDB 只接受来自于同一台服务器上的本地连接,所以通常都会需要修改监听的地址。比如希望监听所有的IPv4地址,就可以将 net.bindIp 项的值由 127.0.0.1 修改为 0.0.0.0。如果需要调整监听的端口,则将 net.port 配置顶的值由 27017 修改为期望值。
修改数据存储
MongoDB 的数据存储目录是由配置文件中的 storage.dbPath 配置项来控制的。默认情况下数据保存在 /var/lib/mongodb 目录下:
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
可以根据自己的需要修改数据目录。在修改之前要确保目录已经存在,并且权限设置正确。目录的所有者应当为 mongodb:mongodb,或者启动进程的用户有读写权限。
如果数据库之前已经有数据了,需要把之前数据目录下的文件都复制到新目录下,否则 MongoDB 会新建空的数据文件结构。
修改日志配置
默认情况下 MongoDB 日志记录在文件 /var/log/mongodb/mongod.log 中。这个是由 systemLog 相关配置项决定的:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
如果要修改日志文件位置,就根据需要修改 systemLog.path 配置项的值。不过要注意日志文件所在目录的权限。运行 MongoDB 进程的用户需要有日志目录的读写权限。默认情况下使用的用户是 mongodb:mongodb。
如果希望日志文件可以轮转(log rotate),则需要添加配项 systemLog.logRotate:
# where to write logging data.
systemLog:
destination: file
logAppend: true
logRotate: true
path: /var/log/mongodb/mongod.log
访问控制
默认配置下,MongoDB 是没有开启访问控制的。此时,用户访问数据库不需要做验证,并且拥有所有的权限。所以在安装完成后,应当立刻开启数据库的访问控制。
- 连接到本地数据库后,在客户端执行以下命令
use admin
db.createUser(
{
user: "admin",
pwd: passwordPrompt(),
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
"readWriteAnyDatabase"
]
}
)
此命令用在
admin数据库下创建一个名为admin的账号。createUser方法参数JSON中的pwd字段用来指定账号的密码。这里指定的是另一个方法passwordPrompt。这个方法在执行createUser命令时,会提示并等待用户在客户端输入密码。roles指定用户的角色和权限。这里给admin授权的第一个权限是admin数据库的管理权限。admin数据库是 MongoDB 用来管理用户的,所以有了这个权限,就可以用来管理数据库的其他账号了。第二个权限readWriteAnyDatabase是对所有数据库的读写权限。 - 在Ubuntu终端中关闭 MongoDB 服务:
sudo systemctl stop mongod.service
- 在配置文件将
security.authorization配置顶设置为true来开启访问控制:security:
authorization: enabled
- 启动 MongoDB 服务来使配置生效:
sudo systemctl start mongod.service
- 使用
admin登录mongo -u admin -p
- 给应用数据库创建账号,比如
app_db下创建账号app_admin:use app_db
db.createUser(
{
user: "app_admin",
pwd: passwordPrompt(),
roles: [ "readWrite" ]
}
)
这里创建的账号是有app_db下的读写权限readWrite的。如果想创建只读账号,则需要指定权限为read。
- 使用普通账号登录
mongo --authenticationDatabase app_db -u app_admin -p
和之前使用
admin账号登录不同,这里指定了authenticationDatabase参数值为app_db,因为app_admin是在app_db下创建的账号。
参考资料
- Install MongoDB Community Edition on Ubuntu
- MongoDB Reference: Configuration File Options
- MongoDB Security: Enable Access Control
- Red Hat Enterprise Linux - System Administrator's Guid - Creating and Modifying systemd Unit Files
在ubuntu 18上安装MongoDB的更多相关文章
- Ubuntu 18.04安装MongoDB 4.0(社区版)
Ubuntu 18.04(虚拟机VirtualBox上),MongoDB 4.0, 听室友说,23点有世界杯决赛呢!可是,孤要写博文的啊!以记录这忙乱的下午和晚间成功安装了一个软件到Linux上.—— ...
- Ubuntu 18.04安装MongoDB 4.0
首先,导入包管理的公钥. Ubuntu包管理工具(即dpkg和apt)要求发行商使用GPG密钥签署包,从而确保包的一致性和真实性. sudo apt-key adv --keyserver hkp:/ ...
- ubuntu 18.04 安装mongodb并设为开机自启动
导入包管理系统使用的公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB4 ...
- Ubuntu上安装MongoDB(译)
add by zhj:直接从第四步开始就可以了,而且安装好MongoDB后会自动启动的,不必自己去执行启动命令 原文:https://docs.mongodb.com/manual/tutorial/ ...
- 在 Ubuntu 上安装 MongoDB
在 Ubuntu 上安装 MongoDB 运行下列命令,导入 MongoDB 公开 GPG 键: sudo apt-key adv --keyserver hkp://keyserver.ubuntu ...
- Ubuntu 12.04上安装 MongoDB并运行
Ubuntu 12.04上安装 MongoDB并运行 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Terminal输入 sudo apt-key ...
- 如何在 Ubuntu 上安装 MongoDB
MongoDB 是一个越来越流行的自由开源的 NoSQL 数据库,它将数据存储在类似 JSON 的灵活文档集中,这与 SQL 数据库中常见的表格形式形成对比. 你很可能发现在现代 Web 应用中使用 ...
- Ubuntu 10.04上安装MongoDB
MongoDB是一个可扩展.高性能的下一代数据库.MongoDB中的数据以文档形式存储,这样就能在单个数据对象中表示复杂的关系.文档可能由 以下几 部分组成:独立的基本类型属性.“内嵌文档”或文档数组 ...
- 在 CentOS7 上安装 MongoDB
在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录: cd /usr/local 3 在当前目录下创建 ...
随机推荐
- #干货#小微信贷风控中类IPC模式和集中审批模式
浅析小微信贷风控中类IPC模式和集中审批模式 席占斌 常言道瑕不掩瑜,反过来讲瑜自然也不能掩瑕,看问题需要客观公正辩证. 在小微信贷中,风控模式依旧是核心,目前比较流行和占比较大的风控模式有很经典的I ...
- HDU 6709“Fishing Master”(贪心+优先级队列)
传送门 •参考资料 [1]:2019CCPC网络选拔赛 H.Fishing Master(思维+贪心) •题意 池塘里有 n 条鱼,捕捉一条鱼需要花费固定的 k 时间: 你有一个锅,每次只能煮一条鱼, ...
- java 泛型的上限与下限
设置泛型对象的上限使用extends,表示参数类型只能是该类型或该类型的子类: 声明对象:类名<? extends 类> 对象名 定义类:类名<泛型标签 extends 类>{ ...
- Promise的封装
要封装Promise,首先要了解Promise的使用. Promise有以下几个特点:1.Promise是一个构造函数 2.实例化Promise时有两个回调函数,resolve,reject ,成功执 ...
- Redis 命令行工具能这样用你知道了吗?
我们天天都在使用 Redis 内置的命令行工具 redis-cli,久而久之以为它就是一个简单的交互式 Redis 数据结构手工操作程序,但是它背后强大的功能绝大多数同学可能闻所未闻.本节我们一起来挖 ...
- H3C查看、删除已经保存配置文件--用户图示(console)以上
<H3C>display saved-configuration //显示已经保存的内容 <H3C>reset saved-configuration //删除 ...
- 深浅Copy的理解
在python里对对象进行拷贝有三个,即赋值,深拷贝,浅拷贝. 而对象又分为两种,一种是不可变对象(字符串.元组.数字 ),一种是可变对象(列表.字典). 而深浅拷贝有三种情况:拷贝的是不可变对象.拷 ...
- 备战省赛组队训练赛第五场(UPC)
中石油比赛链接 CF题目链接 E:博客 G:李继朋 博客 H:苗学林 贺振原 J:博客 苗学林 机房白给队全方位题解:A B E G I J
- JavaScript中的forEach
语法:array.forEach(callbackfn[, thisArg]) 参数说明: array1 必需. 一个数组对象. callbackfn 必需. 一个接受最多三个参数的函数. 对 ...
- 字符串和While循环
字符串是以单引号或双引号括起来的任意文本 创建字符串 str1 = "shaoge is a good man!" 字符串运算 字符串连接 str6 = "shaoge ...