如何在Ubuntu上安装MongoDB?

news2024/9/27 15:22:59

一、Ubuntu安装MongoDB

MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。 打开终端,输入以下命令

sudo apt-get install mongodb

这时装好以后应该会自动运行mongod程序,通过命令查看进程是否已经启动

pgrep mongo -l

命令窗口结果

root@iZm5eetszs07500os8erolZ:~# pgrep mongo -l
32216 mongod
root@iZm5eetszs07500os8erolZ:~#

二、关闭/启动MongoDB

关闭MongoDB

sudo service mongodb stop 

启动MongoDB

sudo service mongodb start

三、systemd管理MongoDB

检查服务状态

sudo systemctl status mongodb

命令窗口结果

其它命令

// 状态查询
sudo systemctl status mongodb

//停用
sudo systemctl stop mongodb

//启动
sudo systemctl start mongodb

//重启
sudo systemctl restart mongodb

修改 MongoDB 是否自动随系统启动(默认:启用)

sudo systemctl disable mongodb

sudo systemctl enable mongodb

注意:极不建议使用kill强制杀死进程,这样数据会存在损坏

四、卸载MongoDB

如果你从 Ubuntu 仓库安装 MongoDB 并想要卸载它(可能要使用官方支持的方式安装),可以输入:

sudo systemctl stop mongodb

sudo apt purge mongodb

sudo apt autoremove

五、目录说明

默认情况下,包管理器将创建 /var/lib/mongodb/var/log/mongodb,配置文件目录为/etc/mongodb.conf

六、使用MongoDB

6.1 使用数据库

MongoDB中,每个数据库的实例都可拥有多个用户,安全检查开启后,只要通过身份验证的用户才能够进行数据的读写操作。admin(管理员)和local(本地)是两个特殊的数据库,它们当中的用户可对任何数据库进行操作。这两个数据库中的用户可被看作是超级用户。经认证后,管理员用户可对任何数据库进行读写,同时能执行某些只有管理员才能执行的命令,如listDatabases和shutDown。

在默认情况下,mongod是监听在127.0.0.1之上的,任何客户端都可以直接连接27017,且没有认证。这样做的好处是,用户可以即时上手,不用担心被一堆配置弄的心烦意乱。然而坏处也是显而易见,如果直接在公网服务器上如此搭建MongoDB,那么所有人都可以直接访问并修改数据库数据了。

MongoDB默认是没有设置鉴权的,业界大部分使用MongoDB的项目也没有设置访问权限。这就意味着只要知道MongoDB服务器的端口,任何能访问到这台服务器的人都可以查询和操作MongoDB数据库的内容。在一些项目当中,这种使用方式会被看成是一种安全漏洞。

其实MongoDB本身有非常详细的安全配置准则,显然开发者也是想到了,然而他是将安全的任务推给用户去解决,这本身的策略就是偏向易用性的,对于安全性,则得靠边站了。

注:每个数据库都有自己的用户,创建用户的命令是db.createUser(),当你创建一个用户时,该用户就属于你当前所在的数据库。

MongoDB有一个比较奇怪的设置是,即便是一个admin用户,授权也必须在admin数据库下进行,而不能在其他数据库下进行。而授权之后admin用户就可以在任何数据库下进行任何操作了。当然数据库级别的用户在他自己的数据库下授权之后是不能到其他数据库进行操作的

标准 URI 连接语法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
 
mongodb:// 这是固定的格式,必须要指定。
username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
portX 可选的指定端口,如果不填,默认为27017
/database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开admin数据库。
?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

root@iZm5eetszs07500os8erolZ:~# mongo mongodb://127.0.0.1:27017
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Server has startup warnings:
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten]
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten]
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten]
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
>

使用shell的方式连接:

root@iZm5eetszs07500os8erolZ:~# mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Server has startup warnings:
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten]
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten]
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten]
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
> use admin
switched to db admin
>

命令说明

//进入数据库
mongo

//显示数据库
show databases;

//使用数据库
use admin

6.2 创建用户

首先保证你已经以用户管理员的身份登录admin数据库。然后用use命令切换到目标数据库,同样用db.createUser() 命令来创建用户,其中角色名为“readWrite”,普通的数据库用户角色有两种,read和readWrite。顾名思义,前者只能读取数据不能修改,后者可以读取和修改。

root@iZm5eetszs07500os8erolZ:~# mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Server has startup warnings:
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten]
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2021-07-26T16:03:25.186+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten]
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2021-07-26T16:03:26.300+0800 I CONTROL  [initandlisten]
> use admin
switched to db admin
> db.createUser({user:"root",pwd:"root123abc",roles:["userAdminAnyDatabase"]})
Successfully added user: { "user" : "root", "roles" : [ "userAdminAnyDatabase" ] }
> use admin
switched to db admin
> db.auth("root","root123abc")
1
> show users;
{
        "_id" : "admin.root",
        "user" : "root",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}
>

命令说明

//创建root用户
db.createUser({user:"root",pwd:"root123abc",roles:["userAdminAnyDatabase"]})

//root登录 db.auth()方法返回1表示登录成功。
db.auth("root","root123abc")

//查看用户
show users;

6.3 删除用户

>db.system.users.remove({"user" : "test_user"});  删除一个test_user用户

6.4 mongodb创建、删除、插入数据命令使用

root@iZm5eetszs07500os8erolZ:~# mongo  
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Server has startup warnings:
2021-07-26T17:22:22.563+0800 I STORAGE  [initandlisten]
2021-07-26T17:22:22.563+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2021-07-26T17:22:22.563+0800 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-07-26T17:22:23.721+0800 I CONTROL  [initandlisten]
2021-07-26T17:22:23.721+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-07-26T17:22:23.721+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2021-07-26T17:22:23.721+0800 I CONTROL  [initandlisten]
> use test     #创建一个test数据库
switched to db test
> show dbs;    #列出所有数据库
admin   0.000GB
config  0.000GB
local   0.000GB

# 但是并没有看到刚才我们创建的test数据库,那是因为test数据库是空的,我们插入一条数据

> db.test.insert({"name":"alanchen"})
WriteResult({ "nInserted" : 1 })
> db.test.find({"name":"alanchen"})     #查询数据
{ "_id" : ObjectId("60fe80e2098d05fbdf907486"), "name" : "alanchen" }
> db.test.findOne()    #查询一条数据
{ "_id" : ObjectId("60fe80e2098d05fbdf907486"), "name" : "alanchen" }

> show dbs;    #test 数据库就显示了
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB

> db.dropDatabase();   # 删除数据库
{ "dropped" : "test", "ok" : 1 }

> show dbs;  # test数据库不显示了
admin   0.000GB
config  0.000GB
local   0.000GB
>

七、MongoDB存储引擎

存储引擎(Storage Engine)是MongoDB的核心组件,负责管理数据如何存储在硬盘(Disk)和内存(Memory)上。从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引擎(Storage Engine),MongoDB支持的存储引擎有:WiredTiger,MMAPv1和In-Memory。

从MongoDB 3.2版本开始,WiredTiger成为MongDB默认的Storage Engine,用于将数据持久化存储到硬盘文件中,WiredTiger提供文档级别(Document-Level)的并发控制,检查点(CheckPoint),数据压缩和本地数据加密( Native Encryption)等功能。
MongoDB不仅能将数据持久化存储到硬盘文件中,而且还能将数据只保存到内存中;In-Memory存储引擎用于将数据只存储在内存中,只将少量的元数据和诊断日志(Diagnostic)存储到硬盘文件中,由于不需要Disk的IO操作,就能获取索取的数据,In-Memory存储引擎大幅度降低了数据查询的延迟(Latency)。

查看MongoDB的默认存储引擎:

echo "db.serverStatus()"| mongo|grep wiredTiger

命令窗口结果

root@iZm5eetszs07500os8erolZ:~# echo "db.serverStatus()"| mongo|grep wiredTiger
                "name" : "wiredTiger",
        "wiredTiger" : {
root@iZm5eetszs07500os8erolZ:~#

WiredTiger和MMAPv1都用于持久化存储数据,相对而言,WiredTiger比MMAPv1更新,功能更强大。

八、MongoDB使用注意事项以及性能优化

  • 使用explain()测试应用程序中的每个查询
  • 避免分散-聚集查询
  • 你的操作应用程序只应从主节点读取
  • 使用MongoDB最新的驱动程序
  • 将记录的所有数据存储在单个文档中
  • 避免使用大文档
  • 避免使用大型索引数组
  • 避免不必要的长字段名称
  • 在考虑低基数字段上的索引时,请谨慎
  • 取消不必要的索引
  • 删除作为其他索引的前缀的索引
  • 使用复合索引而不是索引交集
  • 避免没有留下锚定或生根的正则表达式
  • 使用WiredTiger存储引擎中提供的索引优化(3.0版本之后默认是WiredTiger引擎)
  • 对不同的数据库使用多个设备 - WiredTiger
  • 避免使用ext3文件系统,使用ext4或者xfs文件系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring 实现AOP常见的两种方式(注解或者自定义注解)

第一种 导入AOP相关坐标(依赖冲突解决办法&#xff0c;将依赖中版本号删除&#xff0c;springboot会自动匹配合适的版本 ) <dependencies><!--spring核心依赖&#xff0c;会将spring-aop传递进来--><dependency><groupId>org.springframework</gr…

自动化测试必会之数据驱动测试

数据驱动测试 在实际的测试过程中&#xff0c;我们会发现好几组用例都是相同的操作步骤&#xff0c;只是测试数据的不同&#xff0c;而我们往往需要编写多次用例来进行测试&#xff0c;此时我们可以利用数据驱动测试来简化该种操作。 参数化&#xff1a; 输入数据的不同从而产…

C语言:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

题目&#xff1a; 描述 输入两个升序排列的序列&#xff0c;将两个序列合并为一个有序序列并输出。 输入描述&#xff1a; 输入包含三行&#xff0c; 第一行包含两个正整数n, m&#xff0c;用空格分隔。n表示第二行第一个升序序列中数字的个数&#xff0c;m表示第三…

C++ 教程(12)——循环

C 循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次…

朋友圈功能合集来咯!定时发朋友圈,查看朋友圈,朋友圈跟圈,一键转发朋友圈,延迟评论

&#x1f30a;发布朋友圈 功能介绍&#xff1a;可使用已登录在系统上的微信号发送朋友圈。支持发送图片、文字、视频和公众号链接等几种类型的内容。 &#xff08;1)朋友圈内容编辑&#xff1a;可以在输入框中输入要发送的文本&#xff0c;并在浮窗中选择表情。上传图片可以点…

【c++11】c++11特性

c11 c11简介列表初始化std::initializer_list autodecltypenullptr 结语 c11简介 从C0x到C11&#xff0c;C标准10年磨一剑&#xff0c;第二个真正意义上的标准珊珊来迟。相比于C98/03&#xff0c;C11则带来了数量可观的变化&#xff0c;其中包含了约140个新特性&#xff0c;以…

QT QTreeView\QTreeWidget控件 使用详解

本文详细的介绍了QTreeView、QTreeWidget控件的各种操作&#xff0c;例如&#xff1a;新建界面、QTreeWidget、QTreeView、控件布局、设置列、设置宽高、设置列表头、设置复选框、设置图标、添加树、删除树、查找树、修改树、设置选中、树排序、事件、信号、槽函数、添加节点、…

【玩转Docker小鲸鱼叭】MacOS系统安装Docker

安装Docker Mac 系统安装 Docker 其实很简单&#xff0c;我们在官方文档下载安装一下就可以了&#xff0c;但是需要注意 Docker 官方建议 MacOS 必须是版本 11 或更高版本&#xff0c;如果版本较低&#xff0c;建议先升级 MacOS 版本。 可以通过左上角的小  图片查看系统版…

浅析Spring-kafka源码——消费者模型的实现

SpringBoot项目中的消费端实现而言,Spring-kafka没有用原生的ConsumerConnector,,而是借助原生client的拉取消息功能做了自己的消费模型的实现,提供了@KafkaListener注解这种方式实现消费。 开发中在使用Spring-kafka时,一般也都是通过使用@KafkaListener注解的方法来实现…

Android MPAndroidChart折线图渐变填充实现

效果如下&#xff1a; 以下是一个从上到下渐变的drawable&#xff0c;上面是蓝色&#xff0c;逐步向下变成白色&#xff1a; chart_bg.xml <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk…

静态链接和动态链接 -- 静态加载(隐式调用)和动态加载(显式调用)

区别 静态链接和动态链接 静态链接 : 由链接器在链接时将库的内容加入到可执行程序中&#xff0c;这里的库是静态库&#xff0c;Windows下是*.lib后缀&#xff0c;Linux下是*.a后缀。动态链接 : 可执行程序加载时(静态加载) 或者 运行时(动态加载)&#xff0c;将库文件中的内容…

OpenShift Virtualization - 通过外部固定 IP 访问 VM 中的服务(附视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.12 的环境中验证 文章目录 方法1&#xff1a;通过 Service 的 NodePort 访问 VM方法2&#xff1a;通过外部 IP 访问 VM确认 OpenShift 集群环境为 Worker 节点添加 Linux Bridge创建使用 Li…

『DevOps最佳实践』使用Jenkins和Harbor进行持续集成和交付的解决方案

&#x1f4e3;读完这篇文章里你能收获到 全文采用图文形式讲解学会使用Harbor配置项目学会在Jenkins中配置Harbor推送权限使用Jenkins和Harbor进行持续集成的实践感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录 一、准备工作1. 环境准备2. 修改Docker配置文件3. Docker登陆…

2023蓝桥杯大学A组C++国赛游记+个人题解

Day0 发烧了一晚上没睡着&#xff0c;感觉鼻子被打火机烧烤一样难受&#xff0c;心情烦躁 早上6点起来吃了个早饭&#xff0c;思考能力完全丧失了&#xff0c;开始看此花亭奇谭 看了六集&#xff0c;准备复习数据结构考试&#xff0c;然后秒睡 一睁眼就是下午2点了 挂了个…

04- c语言数组 (C语言)

一 数组的概念 1、在程序设计中&#xff0c;为了方便处理数据把具有相同类型的若干变量按有序形式组织起来,这些按序排列的 同类数据元素的集合 称为 数组。 2、在C语言中&#xff0c;数组属于构造数据类型。一个数组可以分解为多个数组元素&#xff0c;这些数组元素可以是基本…

力扣动态规划专题(三)完全背包 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯 322. 零钱兑换 279.完全平方数 步骤及C++实现

文章目录 完全背包一维dp数组 滚动数组 518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯322. 零钱兑换279.完全平方数139.单词拆分 完全背包 完全背包的物品数量是无限的&#xff0c;01背包的物品数量只有一个 完全背包和01背包分许步骤一样&#xff0c;唯一不同就是体现在遍历顺序上…

deque的介绍

前言 为什么会存在deque呢&#xff1f;在c标准库中deque是作为 stack和queue的底层容器就是deque&#xff0c;我们要是了解过list和vector就会知道这两种容器各有优劣&#xff0c;vector的优点是支持随机访问&#xff0c;进而可以支持排序和二分查找等算法&#xff0c;它的缺点…

鼠标事件 获取鼠标坐标及点击事件

运行效果&#xff1a; 头文件 #ifndef MOUSEEVENT_H #define MOUSEEVENT_H #include #include #include #include class MouseEvent : public QMainWindow { Q_OBJECT public: MouseEvent(QWidget *parent 0); ~MouseEvent(); protected: void mousePressEvent(QMouse…

Linux:一键搭建ftp服务(vsftpd)

《TRO-23614-VSFTPD》 如果csdn收费 可以和我si liao 我会免费发给你 我发的这个是一个tar归档包&#xff0c;脚本就在其中 Linux&#xff1a;《tar》归档命令_鲍海超-GNUBHCkalitarro的博客-CSDN博客 tar xfz tarro_vsftpd.tar.gz -C /root/ # tar xfz tar包路径 -…

SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源

SpringBoot第27讲&#xff1a;SpringBoot集成MySQL - MyBatis 多个数据源 本文是SpringBoot第27讲&#xff0c;在某些场景下&#xff0c;Springboot需要使用多个数据源&#xff0c;以及某些场景会需要多个数据源的动态切换。本文主要介绍上述场景及 SpringBootMyBatis实现多个数…