在Ubuntu中探索MongoDB:从安装到管理的完整指南

3,955 阅读10分钟

🐯

本文将为大家介绍如何在 Ubuntu 上搭建 MongoDB ,并提供简洁明了的步骤。

概述: 该文章提供了在 Ubuntu 操作系统上安装和配置 MongoDB 的详细步骤。它涵盖了从导入公钥和创建列表文件开始,到安装 MongoDB 、运行 MongoDB 服务,以及配置和使用 MongoDB 的过程。以及如何使用 Navicat 连接 MongoDB 数据库的简单指南,完成本文后,你将掌握在Ubuntu上搭建 MongoDB 的基本知识,并能够使用 MongoDB 进行数据存储和操作。


阅读指南:

  1. 准备工作:确保你的服务器已经安装了 gnupg 和 curl ,并导入 MongoDB 的公钥。
  2. 创建列表文件:根据你的 Ubuntu 版本选择合适的列表文件,并重新加载本地包数据库。
  3. 安装MongoDB:选择安装最新稳定版或特定版本的 MongoDB 包,并使用适当的命令进行安装。
  4. 运行MongoDB:根据你的 init 系统选择适当的命令来启动、停止或重启 MongoDB 服务。
  5. 数据库操作:使用 mongosh 命令进入 MongoDB 的命令行界面,执行数据库操作,如导入数据等。
  6. 卸载MongoDB:如果需要卸载 MongoDB ,按照指导停止服务,并删除相关软件包和数据目录。
  7. 配置安全组:如果你使用云服务商的安全组,可以按照文章中的步骤设置白名单,以确保安全访问 MongoDB 。

预计阅读时间:估计完整阅读和实施该文章的步骤可能需要 15 到 30 分钟。


推荐阅读:

想放一个小项目在服务器上?试试看这篇文章

安装、使用和卸载MongoDB

请按照以下步骤逐步操作,别担心,我是按照官网的走的,如果安装过程中遇到任何问题,请随时留言,我会尽快进行修正。

导入包管理系统使用的公钥

如果你的服务器上尚未安装 gnupgcurl ,请先执行以下命令进行安装:

sudo apt-get install gnupg curl

然后导入MongoDB的公钥:

curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \
   --dearmor

创建 MongoDB 的软件包列表文件

根据你的 Ubuntu 版本选择相应的列表文件。首先,查看你的服务器版本:

lsb_release -dc

根据输出的信息,选择适合你的 Ubuntu 版本的列表文件进行创建。

Ubuntu 22.04 (Jammy)

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Ubuntu 20.04 (Focal)

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Ubuntu 18.04 (Bionic)

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Ubuntu 16.04 (Xenial)

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

我的服务器:

root@xxxxxxxxxxx:~# lsb_release -dc

Description:    Ubuntu 22.04.2 LTS
Codename:       jammy

以我的服务器为例,它的版本是 Ubuntu 22.04.2 LTS ,我将会选择第一个列表文件。

重新加载本地软件包数据库

使用以下命令重新加载本地软件包数据库:

    sudo apt-get update

安装 MongoDB 软件包

根据你的需求,有两种安装方式可供选择:

1、安装最新的稳定版软件包:

使用以下命令进行安装:

sudo apt-get install -y mongodb-org

2、安装特定版本的软件包:

使用以下命令安装 6.0.7 版本的软件包:

sudo apt-get install -y mongodb-org=6.0.7 mongodb-org-database=6.0.7 mongodb-org-server=6.0.7 mongodb-org-mongos=6.0.7 mongodb-org-tools=6.0.7

如果使用 apt-get 命令发现有可用的新版本,它可能会升级你的 MongoDB 软件包。为了避免意外升级,你可以将软件包固定在当前安装的版本。执行以下命令:

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

无论你选择哪种安装方式,都使用一下这个 shell ,请确保运行上述命令,避免持续升级带来的潜在问题。

运行 MongoDB

在运行 MongoDB 之前,请先检查你的Linux版本,以确定使用的是 systemd 还是 System V init 作为init系统。

最新版本的 Linux 倾向于使用 systemd (它使用该 systemctl 命令),

而旧版本的 Linux 倾向于使用 System V init (它使用该 service 命令)。

如果你不确定你的服务器使用哪个系统,使用以下命令来检查:

ps --no-headers -o comm 1
  • systemd - 选择下面的 systemd (systemctl) 选项卡。
  • init - 选择下面的 System V Init(服务) 选项卡。

然后按照所选的选项进行MongoDB的启动、停止、重启和查看状态操作。

基本命令示例

使用 systemctl 命令进行操作:

sudo systemctl start mongod    # 启动MongoDB
sudo systemctl status mongod   # 查看MongoDB状态
sudo systemctl stop mongod     # 停止MongoDB
sudo systemctl restart mongod  # 重启MongoDB
mongosh                       # 使用MongoDB命令行工具

使用 System V Init 命令进行操作:

sudo service mongod start    # 启动MongoDB
sudo service mongod status   # 查看MongoDB状态
sudo service mongod stop     # 停止MongoDB
sudo service mongod restart  # 重启MongoDB
mongosh                     # 使用MongoDB命令行工具

主机上运行的 默认端口 27017

MongoDB 目录

MongoDB 相关目录:

  • 数据目录:/var/lib/mongodb
  • 日志目录:/var/log/mongodb

你可以使用以下命令来查看 MongoDB 是否在环境变量中:

which mongod

如果你不满意默认的目录配置,你可以修改 MongoDB 的配置文件 /etc/mongod.conf ,其中包括数据目录和日志目录的位置。下面我将介绍如何连接 Navicat 到服务器数据库的问题。

卸载 MongoDB

如果你需要卸载 MongoDB ,可以按照以下步骤进行操作:

停止 MongoDB

运行以下命令停止 MongoDB 进程:

sudo service mongod stop

删除包

删除之前安装的 MongoDB 软件包:

sudo apt-get purge mongodb-org*

删除数据目录

删除 MongoDB 数据库和日志文件:

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

问题解决

mongosh 命令进入 mongodb 命令行

发起导入文件操作

mongoimport --db weChat --collection ids --file /usr/local/mongodata/weChat.ids.json --jsonArray

再使用 mongoimport 命令导入文件时,会遇到 mongoimport 命令不存在的问题,

因为我们没有安装 mongodb-tools

image-20230719145231047.png

安装 mongodb-tools

以下是安装 mongodb-tools 的步骤:

第一步:复制链接

前往一下连接,下载想要的 tool:www.mongodb.com/try/downloa…

向下滚动,找到 MongoDB Database Tools 下载部分。

根据你选择的 MongoDB 版本,选择相应的安装包,推荐选择 tgz 格式。

image-20230719145758234.png

服务器下载文件

使用以下命令在服务器上下载文件,例如:

wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2204-arm64-100.7.3.tgz

解压文件

下载的文件一般都在/root/ 文件下面

找不到,可以使用

which mongodb-database-tools-ubuntu2204-arm64-100.7.3.tgz

mongodb-database-tools-ubuntu2204-arm64-100.7.3.tgz是文件的下载名称

使用以下命令解压文件,首先进入下载文件所在的目录:

cd /path/to/

然后执行解压命令:

tar -zxvf mongodb-database-tools-*-100.7.3.tgz

设置环境变量

获取环境变量

# echo $PATH

查看输出的环境变量路径,例如:

...:/usr/local/bin:/usr/bin:...

/usr/bin 下面的都是系统预装的可执行程序,会随着系统升级而改变。

/usr/local/bin 目录是用户放置自己的可执行程序的推荐位置,不会被系统升级覆盖同名文件。

因此,我们将文件复制到 /usr/local/bin 目录下是没有问题的。

进入解压后的文件夹,并执行以下命令将文件复制到/usr/local/bin目录下:

sudo cp * /usr/local/bin/

现在尝试运行 mongoimport 命令,看是否能够成功。

sudo mongoimport --db weChat --collection ids --file /usr/local/mongodata/weChat.ids.json --jsonArray

如果仍然无法找到命令,你可以退而求其次,到bin里面😭,将文件复制到 /usr/bin 目录下:

sudo cp * /usr/bin/

然后再次运行 mongoimport 命令。

成功后,你就可以使用 mongoimport 命令导入文件了。

配置 mongo.conf

在连接 Navicat 之前,请先对 mongo.conf 进行配置,以下是一份通用的配置示例:

    # mongod.conf# for documentation of all options, see:
    #   https://docs.mongodb.com/manual/reference/configuration-options/# Where and how to store data.
    storage:
      dbPath: /var/lib/mongodb
      journal:
        enabled: true# where to write logging data.
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log
    ​
    # network interfaces
    net:
      port: 27017
      bindIp: 0.0.0.0
    ​
    # how the process runs
    processManagement:
      timeZoneInfo: /usr/share/zoneinfo
    ​
    #security:
    #  authorization: enabled#operationProfiling:#replication:#sharding:## Enterprise-Only Options:#auditLog:#snmp:

对接 Navicat

在连接 Navicat 之前,确保你的服务器的访问白名单配置允许使用 27017 端口的 0.0.0.0 全部访问

测试连接成功结束后,一定要给自己的主机ip配置一个安全组访问白名单,不然你会收到被删库的消息😄😄😄。

All your data is backed up. You must pay 0.008 BTC to 1Kv1RDK6BGdejeavuTnjNk6zkG9bHj54rD In 48 hours, your data will be publicly disclosed and deleted. (more information: go to https://cutt.ly/rambler1)After paying send mail to us: rambler+1oe0k@onionmail.org and we will provide a link for you to download your data. Your DBCODE is: 1OE0K

安装 Navicat 并使用 SSH 隧道连接到 MongoDB 数据库,其他配置保持默认即可。

其他不用修改直接去选择使用SHH隧道连接

image-20230719152955634.png

真香啊😘

image-20230719153202427.png

完成以上步骤后,你就成功连接到了服务器上的MongoDB数据库。

配置安全组

有人问我安全组怎么配置,我简单以阿里云的安全组讲解

在配置安全组之前,你可以使用以下步骤来了解如何获取你的主机IP地址。

别开 VPN,打开网站 ip.me/

在该网站上,你将看到你当前所使用的主机的公网IP地址。

image-20230719160014517.png

现在,我将简单介绍如何在阿里云上配置安全组

进入阿里云控制台,

找到你的实例,并点击实例名称进入实例详情页面,

在左侧导航栏中,找到并点击 "安全组" 选项。

在安全组列表中,找到你要配置的安全组,并点击 "配置规则" 按钮。

image-20230719155426700.png

在规则列表中,点击 "添加安全组规则"。

在弹出的对话框中,选择 "自定义 TCP " 规则。

填写以下信息:

  • 端口范围:输入 MongoDB 使用的端口号(默认为 27017 )。
  • 授权对象:选择 "0.0.0.0/0",允许来自任何IP地址的访问,这个要设置自己的公网 ip
  • 授权策略:选择 "允许"。

设置一下:授权对象(白名单),点击一下授权对象合并,好操作

image-20230719155613217.png

点击 "确认" 完成安全组规则的添加。

现在,你已成功配置了安全组,允许来自自己的主机访问 MongoDB 服务。

开放所有 IP 地址的访问就可能会带来安全风险,丢数据库别勒索在正常不过了。

运行报错问题解决

当 mongodb 起不来,注意查看 log 日志文件

查看 MongoDB 的日志文件,通常位于 /var/log/mongodb/mongod.log

错误信息

问题:

"msg":"Failed to unlink socket file","attr":{"path":"/tmp/mongodb-27017.sock","error":"Operation not permitted"}

解决问题:

  1. 检查文件和目录权限:确保套接字文件 "/tmp/mongodb-27017.sock" 可以被mongod进程访问。确保该文件的所有者和组与 mongod 进程的用户匹配,并且具有适当的读写权限。
  2. 清理套接字文件:如果套接字文件存在但无法删除,您可以尝试手动删除该文件。使用以下命令删除套接字文件:
sudo rm /tmp/mongodb-27017.sock
  1. 重新启动MongoDB服务
sudo systemctl restart mongod