MongoDB 安装

Posted 狂乱的贵公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB 安装相关的知识,希望对你有一定的参考价值。

1.  yum方式安装

1、添加一个yum源

创建一个 /etc/yum.repos.d/mongodb-org-5.0.repo 文件

[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

2、安装MongoDB包

sudo yum install -y mongodb-org

默认配置文件:/etc/mongod.conf

默认数据文件目录:/var/lib/mongo

默认日志文件目录:/var/log/mongodb

3、可以自定义配置文件,更改某些设置

比如,指定新的数据存储目录(例如:/some/data/directory)或者 指定新的日志文件路径(例如:/some/log/directory/mongod.log)

最后,一定要确保运行MongoDB的用户有权限访问这些目录。假设我们新创建了一个用户叫zhangsan,我们打算用zhangsan这个用户来运行MongoDB,那么必须确保zhangsan可以访问/some/data/directory和/some/log/directory/mongod.log

于是,可以这样操作

sudo chown -R zhangsan:zhangsan <directory>
mongod --config /etc/mongod.conf

PS:如果更改运行 MongoDB 进程的用户,则必须授予新用户访问这些目录的权限。

4、启动MongoDB

sudo systemctl start mongod

5、查看MongoDB运行状态

sudo systemctl status mongod

6、停止MongoDB

sudo systemctl stop mongod

7、重启MongoDB

sudo systemctl restart mongod

8、使用MongoDB 

mongosh

在与 mongod 相同的主机上启动 mongosh 会话。可以在不带任何参数的情况下运行 mongosh,这样的话就会连接本地 localhost 上运行的 mongod,默认端口为 27017。

9、help

10、卸载MongoDB

# 停止服务
sudo systemctl stop mongod
# 删除安装包
sudo yum erase $(rpm -qa | grep mongodb-org)
# 删除数据库和日志文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo

11、快速开始

MongoDB 将文档存储在集合中。 集合类似于关系数据库中的表。 如果集合不存在,MongoDB 会在首次存储该集合的数据时创建该集合。

12、包名称和描述

  • mongodb-org-database : 是一个metapackage,会自动安装下列组件包
  1. mongodb-org-server : 包含 mongod 守护进程、相关的初始化脚本和配置文件 (/etc/mongod.conf)
  2. mongodb-org-mongos : 包含 mongos 守护进程
  3. mongodb-org-shell : 包含历史遗留的 mongo shell
  • mongodb-mongosh : 包含 MongoDB Shell (mongosh)
  • mongodb-org-tools : 是一个metapackage,会自动安装以下组件包
  1. mongodb-database-tools : 包含下列MongoDB数据库工具(mongodump 、mongorestore 、bsondump 、mongoimport 、mongoexport 、mongostat 、mongotop 、mongofiles)
  2. mongodb-org-database-tools-extra : 包含install_compass脚本

13、关闭防火墙

systemctl stop|start|status firewalld

2.  docker方式安装

下载镜像

docker pull mongo

指定版本运行容器

1、启动一个 mongo server 实例

docker run --name some-mongo -d mongo:tag

2、从另一个 Docker 容器连接到 MongoDB

以下示例启动另一个 MongoDB 容器实例,并针对上面示例中的原始 MongoDB 容器运行 mongo 命令行客户端,从而允许您对数据库实例执行 MongoDB 语句:

docker run -it --network some-network --rm mongo mongo --host some-mongo test

 (PS:这里解释一下,这就相当于是在B容器中远程连接到A容器,相当于是本地mongo客户端连接到远程mongo服务器。由于现在mongo是运行在docker容器里的,所以我们可以把运行mongo server的容器理解成一台机器A,为了能够在另外一台机器B中连接到A,需要B上至少安装了mongo shell,这就是mongo client 连接到远程 mongo server)

3、容器shell访问并查看MongoDB日志

docker exec 命令允许你在 Docker 容器内运行命令。 以下命令行将为你提供 mongo 容器内的 bash shell: 

docker exec -it some-mongo bash

MongoDB 服务器日志可通过 Docker 的容器日志获得:

docker logs some-mongo

4、帮助

查看帮助,可以知道mongo容器运行时可以带哪些参数

docker run -it --rm mongo --help

5、设置WiredTiger缓存大小限制

docker run --name some-mongo -d mongo --wiredTigerCacheSizeGB 1.5

6、用一个自定义的MongoDB配置文件

mongod 默认不读取配置文件,所以需要通过 --config 选项来指定配置文件的路径。 通过从 mongo 创建自定义 Dockerfile 或将其从主机挂载到容器来创建自定义配置文件并将其放入容器中。 

例如,假设/my/custom/mongod.conf是自定义的配置文件,那么在启动MongoDB容器的时候可以这样:

docker run --name some-mongo -v /my/custom:/etc/mongo -d mongo --config /etc/mongo/mongod.conf

默认的配置文件(/etc/mongod.conf)如下:

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

#snmp:

7、环境变量

启动 mongo 镜像时,可以通过在 docker run 命令行中传递一个或多个环境变量来调整 MongoDB 实例的初始化。

MONGO_INITDB_ROOT_USERNAME, MONGO_INITDB_ROOT_PASSWORD 这两个变量一起使用,创建一个新用户并设置该用户的密码。 该用户是在管理员(admin)身份验证数据库中创建的,并被赋予 root 角色,这是一个“superuser(超级用户)”角色。 

下面是一个例子,使用这两个变量创建一个MongoDB实例,然后使用 mongo cli 连接到admin身份认证数据库。

首先,启动容器,创建MongoDB实例 

docker run -d --network some-network --name some-mongo \\
    -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \\
    -e MONGO_INITDB_ROOT_PASSWORD=secret \\
    mongo

连接到前面创建的mongo server实例容器

docker run -it --rm --network some-network mongo \\
    mongo --host some-mongo \\
        -u mongoadmin \\
        -p secret \\
        --authenticationDatabase admin \\
        some-db

(PS:命令行中的mongo是镜像的名字,而 mongod 是 MongoDB 系统的主要守护进程)

要创建用户,这两个变量都是必需的。 如果二者都存在,那么 MongoDB 将启用身份验证(mongod --auth)

MongoDB 中的身份验证相当复杂,因此更复杂的用户设置通过 /docker-entrypoint-initdb.d/ 显式留给用户自己设置

MONGO_INITDB_DATABASE 这个变量允许您指定用于/docker-entrypoint-initdb.d/*.js中创建脚本的数据库名称

MongoDB 设计的最基本的原则是:"create on first use" (第一次使用时创建)

作为通过环境变量传递敏感信息的替代方法,_FILE 可以附加到先前列出的环境变量中,从而导致初始化脚本从容器中存在的文件中加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 密钥存储中加载密码。当前,只支持MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 。

docker run --name some-mongo -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root -d mongo

8、认证

MongoDB 中的身份验证相当复杂,参见:

mongod --auth

Security > Authentication 

Security > Role-Based Access Control 

Security > Role-Based Access Control > Built-In Roles 

Security > Enable Auth (tutorial) 

9、数据存储在哪里 

有两种方法可以存储在 Docker 容器中运行的应用程序使用的数据。

方式一:让Docker使用自己的内部卷管理将数据库文件写入主机系统上的磁盘,从而管理数据库数据的存储。这是默认设置,对用户来说非常简单且相当透明。缺点是,对于直接运行在主机系统上的工具和应用程序(即外部容器)来说,可能很难找到这些文件。

方式二:在宿主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内部可见的目录。这会将数据库文件放置在主机系统上的已知位置,并使主机系统上的工具和应用程序可以轻松访问这些文件。 缺点是,用户需要确保目录存在,例如,主机系统上的目录权限和其他安全机制是正确设置的。

(PS:总结一下,两种方式,一种是放到容器内部,另一种是放到容器外部)

由docker自己管理这种默认行为就不在这里演示了,下面演示一下将容器外部的目录挂载到容器这种方式:

首先,在宿主机上创建一个目录,比如叫 /my/own/datadir

然后,在启动容器的时候使用 -v 选项挂载目录

docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo

这个命令中,-v /my/own/datadir:/data/db 将主机系统上的/my/own/datadir目录挂载到容器的/data/db。docker容器安装mongodb时,默认情况下MongoDB会将它的数据存放在/data/db目录中。

备忘录

docker network create my-network
docker network ls
docker run -d --network my-network --name my-mongo mongo
docker run -it --rm --network my-network mongo mongo --host my-mongo test
docker exec -it my-mongo bash

10、创建数据库转储(dump)

docker exec some-mongo sh -c \'exec mongodump -d <database_name> --archive\' > /some/path/on/your/host/all-collections.archive

11、备忘录

docker run --network some-network --name some-mongo -v /my/custom:/etc/mongo -p 27017:27017 -d mongo --config /etc/mongo/mongod.conf

docker run --name some-mongo -p 27017:27017 -d mongo --auth
docker exec -it some-mongo mongo admin

> db.createUser(user:"root",pwd:"123456",roles:["root"])


docker run -d --name some-mongo \\
    -e MONGO_INITDB_ROOT_USERNAME=admin \\
    -e MONGO_INITDB_ROOT_PASSWORD=123456 \\
    mongo


docker exec -it some-mongo mongo

 

 

文档:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

https://registry.hub.docker.com/_/mongo 

https://docs.docker.com/engine/reference/commandline/network/ 

 

以上是关于MongoDB 安装的主要内容,如果未能解决你的问题,请参考以下文章

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

mongodb关联查询

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

PHP代码-psysh调试代码片段工具

无法在 MongoDB(猫鼬)文档中追加数组

VIM 代码片段插件 ultisnips 使用教程