99 # mongo 的基本安装和配置

本文介绍了关系型数据库与非关系型数据库的区别,重点讲解了MongoDB的特点如分布式、BSON存储和安装方法,以及基本操作如创建数据库、插入数据、查询、删除和用户管理。此外,还提到了如何在MongoDB中启用安全认证和使用Robo3T可视化工具。

关系型数据库和非关系型数据库

  • MySQL Oracle SqlServer 用一种关系模型来组织数据的数据库(查询方便,不方便拓展)
  • nosql mongo redis memcached (不同于传统的关系数据库)

mongo 特点

  • 分布式:文档类型,值就是传统对象类型 key=>value BSON,储存复杂结构的数据
  • 性能高:不需要通过 SQL 层来进行解析(分析的过程 操作的过程 浪费性能),数据之间没有耦合,可以方便拓展,不适合复杂查询

mongo 的安装方式

https://www.mongodb.com/try/download/community

选择自己的版本
在这里插入图片描述
我参考的是这篇文章安装的:MongoDB下载安装教程

启动 mongodb

手动启动:自己启动服务端,并且指向路径储存的路径,然后启动客户端,需配置环境变量

mongod --dbpath="D:\Program Files\MongoDB\Server\4.4\data"
mongo

或者启动 MongoDB,再双击 mongo.exe

在这里插入图片描述

可执行文件的路径

"D:\Program Files\MongoDB\Server\4.4\bin\mongod.exe" --config "D:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg" --service

在这里插入图片描述
cfg 配置文件 D:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg 如下:

在这里插入图片描述
在这里插入图片描述
在浏览器访问:http://127.0.0.1:27017 出现如下页面证明 mongoDb 启动成功。

在这里插入图片描述

mongo 的语句

显示所有的数据库(默认免密码)

show dbs

在这里插入图片描述
如果数据库不存在,则创建数据库,否则切换到指定数据库。

use DATABASE_NAME

在这里插入图片描述
如果要查看已有集合,可以使用下面两个命令:

show collections
show tables

在这里插入图片描述
我们创建数据库kaimo,往集合 kaimo 里插入两条数据

use kaimo
db.kaimo.insertOne({"name":"凯小默1"})
db.kaimo.insertOne({"name":"凯小默2"})

在这里插入图片描述
查询

db.kaimo.find({})
db.kaimo.find({"name": "凯小默1"})

在这里插入图片描述

删除

db.kaimo.deleteOne({"name": "凯小默2"})

在这里插入图片描述

下面创建根用户,在创建一个数据库分配这个数据库的权限,默认可以在 admin 中创建根用户,创建其他数据库,在针对某个数据库中,创建用户,赋予当前权限,下次链接这个数据库时可以登录这个账号。

use admin
db.createUser({user: "root", pwd: "root", roles: ["root"]})

在这里插入图片描述
创建一个 user 库,给集合 student 添加两条数据

use user
db.student.insert({name:"凯小默", age: 313})
db.student.insert({name:"凯小默2", age: 3})

在这里插入图片描述
ObjectId 的构成

ObjectId 是一个 12 字节的 BSON 类型字符串,按照字节顺序,依次代表:

  • 4 字节:UNIX 时间戳
  • 3 字节:表示运行 MongoDB 的机器
  • 2 字节:表示生成此 _id 的进程
  • 3 字节:由一个随机数开始的计数器生成的值
ObjectId("65279b292d3834025d88a1b9")

MongoDB 开启安全认证,首先使用配置文件,增加参数:

security:
  authorization: enabled

在这里插入图片描述
在重新启动,执行 show dbs 发现看不到数据库了

在这里插入图片描述
以用户管理员身份进行连接和验证

use admin
db.auth("root", "root")
show dbs

在这里插入图片描述
再创建一个用户 kaimo313 去管理用户表,可读可写

use user
db.createUser({user: "kaimo313", pwd: "kaimo313", roles: [{role: "readWrite", db: "user"}]})

在这里插入图片描述
重启服务,访问 user 库里的所有集合,会提示:Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus

use user
show collections

在这里插入图片描述

上面的原因是因为连着的 MongoDB 中的 user 数据库它是有用户名和密码的,在没有进行登录的情况下,想直接查看数据库集合名称时,遭到了拒绝,因此,首先要进行登录操作,获得查看 collections 的权限。

db.auth("kaimo313", "kaimo313")
show collections

在这里插入图片描述

mysqlmongo
集合
行和列BSON

Robo 3T

Robo 3T:MongoDB 可视化工具

Robo 3T v1.4.3下载地址

我参考的是这篇:【Robo 3T】MongoDB可视化工具-- Robo 3T使用教程

点击【Create】,选择【Connection】输入需要连接的服务端【地址】和【端口】

在这里插入图片描述
配置权限
在这里插入图片描述
双击或者链接
在这里插入图片描述
在这里插入图片描述
配置user表权限
在这里插入图片描述
在这里插入图片描述

<think>好的,用户之前遇到了在Crawlab中执行`cd /app/spiders/<spider_id>`时提示目录不存在的问题,现在提供了他们的docker-compose文件,询问是否需要修改路径挂载配置。我需要仔细分析他们的配置,找出可能的问题所在。 首先,回顾之前的解决方案,用户的问题核心在于容器内的`/app/spiders`目录不存在或挂载不正确。根据用户提供的docker-compose.yml,我需要检查volumes部分是否有正确的挂载。 查看用户当前的volumes配置,master服务挂载了三个路径: 1. `/opt/.crawlab/master:/root/.crawlab` 2. `/opt/crawlab/master:/data` 3. `/var/crawlab/log:/var/log/crawlab` 这些挂载点似乎都是用于元数据、数据日志的持久化,但缺少了蜘蛛(spiders)目录的挂载。在Crawlab中,蜘蛛代码通常存储在`/app/spiders`目录下,如果未正确挂载,容器重启后蜘蛛文件会丢失,导致路径不存在的问题。 接下来,考虑Crawlab的版本。用户之前的问题中提到不同版本的路径可能不同,比如旧版可能使用`/app/crawlab/spiders`,而新版使用`/app/spiders`。用户当前的镜像可能没有显式指定版本,可能需要确认。假设用户使用的是较新版本,比如0.6.0或更高,那么正确的挂载点应该是`/app/spiders`。 因此,用户需要在volumes中添加一个新的挂载项,将宿主机的目录挂载到容器的`/app/spiders`。例如:`- "/opt/crawlab/spiders:/app/spiders"`。这样,蜘蛛文件会被持久化到宿主机,避免容器重启后丢失。 另外,需要检查用户是否在Crawlab的配置中指定了蜘蛛路径。环境变量`CRAWLAB_SPIDER_PATH`如果未设置,可能默认就是`/app/spiders`,但显式设置会更明确。所以建议在environment部分添加`CRAWLAB_SPIDER_PATH: "/app/spiders"`。 关于权限问题,用户之前遇到的权限错误可能因为宿主机目录的权限不足。需要确保宿主机上的`/opt/crawlab/spiders`目录存在,并且权限设置为UID 1000(容器内用户可能使用此UID)。可以通过`chown -R 1000:1000 /opt/crawlab/spiders``chmod 755`来调整。 此外,用户的mongo服务配置正确,数据持久化到`/opt/crawlab/mongo/data/db`,这没问题。主服务的其他挂载点如元数据日志也是合理的,不需要修改。 最后,用户可能需要更新docker-compose文件后,重新部署服务,并检查蜘蛛目录是否被正确创建访问。如果之前已经运行过容器,可能需要清理旧容器卷,确保新的挂载生效。</think>--- ### 一、当前配置核心缺陷 根据您提供的 `docker-compose.yml`,存在 **蜘蛛存储路径缺失** 的关键问题。原始配置缺少对 `/app/spiders` 的挂载,导致以下问题: 1. 爬虫文件无法持久化存储(容器重启后丢失) 2. Web界面上传的爬虫无法创建 `<spider_id>` 子目录 3. 执行 `cd /app/spiders` 必然报错 --- ### 二、必要修改方案 #### 步骤1:添加蜘蛛目录挂载 在 `master` 服务的 `volumes` 配置段增加: ```yaml volumes: - "/opt/crawlab/spiders:/app/spiders" # 新增核心挂载 - "/opt/.crawlab/master:/root/.crawlab" - "/opt/crawlab/master:/data" - "/var/crawlab/log:/var/log/crawlab" ``` #### 步骤2:验证路径权限 在宿主机执行: ```bash # 创建目录并设置容器可写(容器内用户UID通常为1000) sudo mkdir -p /opt/crawlab/spiders sudo chown -R 1000:1000 /opt/crawlab/spiders sudo chmod 755 /opt/crawlab/spiders # 验证目录归属 ls -ld /opt/crawlab/spiders # 应显示 drwxr-xr-x 1000 1000 ``` --- ### 三、改进后的完整配置 ```yaml version: &#39;3.3&#39; services: master: image: crawlabteam/crawlab:0.6.0 # 建议明确版本号 container_name: crawlab_master restart: always environment: CRAWLAB_NODE_MASTER: "Y" CRAWLAB_MONGO_HOST: "mongo" CRAWLAB_MONGO_PORT: "27017" CRAWLAB_MONGO_DB: "crawlab" CRAWLAB_MONGO_USERNAME: "username" CRAWLAB_MONGO_PASSWORD: "password" CRAWLAB_MONGO_AUTHSOURCE: "admin" CRAWLAB_SPIDER_PATH: "/app/spiders" # 显式声明蜘蛛路径(可选但推荐) volumes: - "/opt/crawlab/spiders:/app/spiders" # 核心修复点 - "/opt/.crawlab/master:/root/.crawlab" - "/opt/crawlab/master:/data" - "/var/crawlab/log:/var/log/crawlab" ports: - "8080:8080" depends_on: - mongo mongo: image: mongo:4.2 restart: always environment: MONGO_INITDB_ROOT_USERNAME: "username" MONGO_INITDB_ROOT_PASSWORD: "password" volumes: - "/opt/crawlab/mongo/data/db:/data/db" ports: - "27017:27017" ``` --- ### 四、修改后验证方法 #### 方法1:目录绑定验证 ```bash # 查看容器挂载详情 docker inspect crawlab_master | grep -A 10 Mounts # 预期输出应包含: # "Source": "/opt/crawlab/spiders", # "Destination": "/app/spiders", ``` #### 方法2:容器内操作测试 ```bash # 进入容器shell docker exec -it crawlab_master /bin/bash # 在容器内创建测试文件 touch /app/spiders/test.txt # 宿主机验证文件存在 ls /opt/crawlab/spiders/test.txt # 应显示文件 ``` --- ### 五、各挂载路径功能说明 | 容器内路径 | 宿主机路径 | 作用 | |------------------------|-----------------------------|-------------------------------| | `/app/spiders` | `/opt/crawlab/spiders` | **核心修复** 存储爬虫代码 | | `/root/.crawlab` | `/opt/.crawlab/master` | 配置文件、元数据 | | `/data` | `/opt/crawlab/master` | 任务数据、结果存储 | | `/var/log/crawlab` | `/var/crawlab/log` | 任务日志 | | `/data/db` (mongo) | `/opt/crawlab/mongo/data/db`| MongoDB数据库持久化 | --- ### 六、常见问题预防 #### 问题1:文件权限冲突 **现象**:Web界面上传爬虫时报 `Permission denied` **解决方案**: ```bash # 递归修复宿主目录权限 sudo chown -R 1000:1000 /opt/crawlab/spiders ``` #### 问题2:版本路径差异 **现象**:修改后仍提示 `/app/spiders` 不存在 **处理流程**: 1. 确认镜像版本: ```bash docker inspect crawlab_master | grep Image ``` 2. 若为旧版(≤0.4.0): ```yaml volumes: - "/opt/crawlab/spiders:/app/crawlab/spiders" # 旧版路径 ``` --- ### 七、运维建议 1. **路径标准化**:所有Crawlab相关存储统一在 `/opt/crawlab` 下管理 2. **备份策略**:定期备份 `/opt/crawlab/spiders` MongoDB 数据 3. **版本锁定**:明确指定 `crawlabteam/crawlab:0.6.0` 避免隐式更新导致路径变化 修改后重启服务即可生效: ```bash docker-compose down && docker-compose up -d ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯小默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值