MongoDB 安装
<p style="color: inherit; line-height: inherit; padding: 0; margin: 1.8em 0; font-weight: bold; border-bottom: 2px solid rgba(181, 77, 65, 1); font-size: 1.8em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(181, 77, 65, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">1. yum方式安装</span></p><p><span style="font-family: "Microsoft YaHei"; font-size: 18px">1、添加一个yum源</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">创建一个 /etc/yum.repos.d/mongodb-org-5.0.repo 文件</span></p>
<div>
<pre><code style="font-size: 16px">
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
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">2、安装MongoDB包</span></p>
<div>
<pre><code style="font-size: 16px">sudo yum install -y mongodb-org
</code></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220107171132607-1352594290.png" alt=""></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">默认配置文件:/etc/mongod.conf</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">默认数据文件目录:/var/lib/mongo</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">默认日志文件目录:/var/log/mongodb</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">3、可以自定义配置文件,更改某些设置</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">比如,指定新的数据存储目录(例如:/some/data/directory)或者 指定新的日志文件路径(例如:/some/log/directory/mongod.log)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">最后,一定要确保运行MongoDB的用户有权限访问这些目录。假设我们新创建了一个用户叫zhangsan,我们打算用zhangsan这个用户来运行MongoDB,那么必须确保zhangsan可以访问/some/data/directory和/some/log/directory/mongod.log</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">于是,可以这样操作</span></p>
<div>
<pre><code style="font-size: 16px">sudo chown -R zhangsan:zhangsan <directory><br>mongod --config /etc/mongod.conf</code></pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1); font-family: "Microsoft YaHei"; font-size: 16px">PS:如果更改运行 MongoDB 进程的用户,则必须授予新用户访问这些目录的权限。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">4、启动MongoDB</span></p>
<div>
<pre><code style="font-size: 16px">sudo systemctl start mongod
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">5、查看MongoDB运行状态</span></p>
<div>
<pre><code style="font-size: 16px">sudo systemctl status mongod
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">6、停止MongoDB</span></p>
<div>
<pre><code style="font-size: 16px">sudo systemctl stop mongod
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">7、重启MongoDB</span></p>
<div>
<pre><code style="font-size: 16px">sudo systemctl restart mongod
</code></pre>
</div>
<p><span style="font-size: 18px"><span style="font-family: "Microsoft YaHei"">8、使用MongoDB</span> </span></p>
<div>
<pre><code style="font-size: 16px">mongosh
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">在与 mongod 相同的主机上启动 mongosh 会话。可以在不带任何参数的情况下运行 mongosh,这样的话就会连接本地 localhost 上运行的 mongod,默认端口为 27017。</span></p>
<p><img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220108133601912-647793139.png" alt=""></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">9、help</span></p>
<p><img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220108133640362-325013085.png" alt=""></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">10、卸载MongoDB</span></p>
<div>
<pre><code style="font-size: 16px"># 停止服务
sudo systemctl stop mongod
# 删除安装包
sudo yum erase $(rpm -qa | grep mongodb-org)
# 删除数据库和日志文件
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongo
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">11、快速开始</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">MongoDB 将文档存储在集合中。 集合类似于关系数据库中的表。 如果集合不存在,MongoDB 会在首次存储该集合的数据时创建该集合。</span></p>
<p><img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220108143514022-1232831796.png" alt=""></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">12、包名称和描述</span></p>
<ul>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-org-database : 是一个metapackage,会自动安装下列组件包</span></li>
</ul>
<ol>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-org-server : 包含 mongod 守护进程、相关的初始化脚本和配置文件 (/etc/mongod.conf)</span></li>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-org-mongos : 包含 mongos 守护进程</span></li>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-org-shell : 包含历史遗留的 mongo shell</span></li>
</ol>
<ul>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-mongosh : 包含 MongoDB Shell (mongosh)</span></li>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-org-tools : 是一个metapackage,会自动安装以下组件包</span></li>
</ul>
<ol>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-database-tools : 包含下列MongoDB数据库工具(mongodump 、mongorestore 、bsondump 、mongoimport 、mongoexport 、mongostat 、mongotop 、mongofiles)</span></li>
<li><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongodb-org-database-tools-extra : 包含install_compass脚本</span></li>
</ol>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">13、关闭防火墙</span></p>
<div>
<pre><code style="font-size: 16px">systemctl stop|start|status firewalld
</code></pre>
</div>
<p style="color: inherit; line-height: inherit; padding: 0; margin: 1.8em 0; font-weight: bold; border-bottom: 2px solid rgba(181, 77, 65, 1); font-size: 1.8em"><span style="font-size: inherit; line-height: inherit; margin: 0 3px 0 0; display: inline-block; font-weight: normal; background: rgba(181, 77, 65, 1); color: rgba(255, 255, 255, 1); padding: 3px 10px 1px; border-top-right-radius: 3px; border-top-left-radius: 3px">2. docker方式安装</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">下载镜像</span></p>
<div>
<pre><code style="font-size: 16px">docker pull mongo</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">指定版本运行容器</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">1、启动一个 mongo server 实例</span></p>
<div>
<pre><code style="font-size: 16px">docker run --name some-mongo -d mongo:tag
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">2、从另一个 Docker 容器连接到 MongoDB</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">以下示例启动另一个 MongoDB 容器实例,并针对上面示例中的原始 MongoDB 容器运行 mongo 命令行客户端,从而允许您对数据库实例执行 MongoDB 语句:</span></p>
<div>
<pre><code style="font-size: 16px"><span style="color: rgba(0, 0, 255, 1)">docker run -it --network some-network --rm mongo</span> <span style="color: rgba(0, 128, 0, 1)">mongo --host some-mongo test
</span></code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px"> (PS:这里解释一下,这就相当于是在B容器中远程连接到A容器,相当于是本地mongo客户端连接到远程mongo服务器。由于现在mongo是运行在docker容器里的,所以我们可以把运行mongo server的容器理解成一台机器A,为了能够在另外一台机器B中连接到A,需要B上至少安装了mongo shell,这就是mongo client 连接到远程 mongo server)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">3、容器shell访问并查看MongoDB日志</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">docker exec 命令允许你在 Docker 容器内运行命令。 以下命令行将为你提供 mongo 容器内的 bash shell: </span></p>
<div>
<pre><code style="font-size: 16px">docker exec -it some-mongo bash
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">MongoDB 服务器日志可通过 Docker 的容器日志获得:</span></p>
<div>
<pre><code style="font-size: 16px">docker logs some-mongo</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">4、帮助</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">查看帮助,可以知道mongo容器运行时可以带哪些参数</span></p>
<div>
<pre><code style="font-size: 16px">docker run -it --rm mongo --help
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">5、设置WiredTiger缓存大小限制</span></p>
<div>
<pre><code style="font-size: 16px">docker run --name some-mongo -d mongo --wiredTigerCacheSizeGB 1.5</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">6、用一个自定义的MongoDB配置文件</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">mongod 默认不读取配置文件,所以需要通过 --config 选项来指定配置文件的路径。 通过从 mongo 创建自定义 Dockerfile 或将其从主机挂载到容器来创建自定义配置文件并将其放入容器中。 </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">例如,假设/my/custom/mongod.conf是自定义的配置文件,那么在启动MongoDB容器的时候可以这样:</span></p>
<div>
<pre><code style="font-size: 16px">docker run --name some-mongo -v /my/custom:/etc/mongo -d mongo --config /etc/mongo/mongod.conf</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">默认的配置文件(/etc/mongod.conf)如下:</span></p>
<pre><code style="font-size: 16px"># 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:</code></pre>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">7、环境变量</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">启动 mongo 镜像时,可以通过在 docker run 命令行中传递一个或多个环境变量来调整 MongoDB 实例的初始化。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px"><strong>MONGO_INITDB_ROOT_USERNAME</strong>, <strong>MONGO_INITDB_ROOT_PASSWORD</strong> 这两个变量一起使用,创建一个新用户并设置该用户的密码。 该用户是在管理员(admin)身份验证数据库中创建的,并被赋予 root 角色,这是一个“superuser(超级用户)”角色。 </span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">下面是一个例子,使用这两个变量创建一个MongoDB实例,然后使用 mongo cli 连接到admin身份认证数据库。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">首先,启动容器,创建MongoDB实例 </span></p>
<div>
<pre><code style="font-size: 16px">docker run -d --network some-network --name some-mongo \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo</code></pre>
</div>
<p><span style="font-size: 16px">连接到前面创建的mongo server实例容器</span></p>
<div>
<pre><code style="font-size: 16px">docker run -it --rm --network some-network mongo \
mongo --host some-mongo \
-u mongoadmin \
-p secret \
--authenticationDatabase admin \
some-db
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">(PS:命令行中的mongo是镜像的名字,而 mongod 是 MongoDB 系统的主要守护进程)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">要创建用户,这两个变量都是必需的。 如果二者都存在,那么 MongoDB 将启用身份验证(mongod --auth)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">MongoDB 中的身份验证相当复杂,因此更复杂的用户设置通过 /docker-entrypoint-initdb.d/ 显式留给用户自己设置</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px"><strong>MONGO_INITDB_DATABASE </strong>这个变量允许您指定用于/docker-entrypoint-initdb.d/*.js中创建脚本的数据库名称</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">MongoDB 设计的最基本的原则是:"create on first use" (第一次使用时创建)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">作为通过环境变量传递敏感信息的替代方法,_FILE 可以附加到先前列出的环境变量中,从而导致初始化脚本从容器中存在的文件中加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 密钥存储中加载密码。当前,只支持MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 。</span></p>
<div>
<pre><code style="font-size: 16px">docker run --name some-mongo -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root -d mongo
</code></pre>
</div>
<p><span style="font-size: 18px">8、认证</span></p>
<p><span style="font-size: 16px">MongoDB 中的身份验证相当复杂,参见:</span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-family: "Microsoft YaHei"; font-size: 16px"><span style="color: rgba(0, 0, 255, 1)">mongod --auth</span></span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-family: "Microsoft YaHei"; font-size: 16px"><span style="color: rgba(0, 0, 255, 1)">Security > Authentication</span> </span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-family: "Microsoft YaHei"; font-size: 16px"><span style="color: rgba(0, 0, 255, 1)">Security > Role-Based Access Control</span> </span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-family: "Microsoft YaHei"; font-size: 16px"><span style="color: rgba(0, 0, 255, 1)">Security > Role-Based Access Control > Built-In Roles</span> </span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-family: "Microsoft YaHei"; font-size: 16px"><span style="color: rgba(0, 0, 255, 1)">Security > Enable Auth (tutorial)</span></span> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">9、数据存储在哪里</span> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">有两种方法可以存储在 Docker 容器中运行的应用程序使用的数据。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">方式一:让Docker使用自己的内部卷管理将数据库文件写入主机系统上的磁盘,从而管理数据库数据的存储。这是默认设置,对用户来说非常简单且相当透明。缺点是,对于直接运行在主机系统上的工具和应用程序(即外部容器)来说,可能很难找到这些文件。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">方式二:在宿主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内部可见的目录。这会将数据库文件放置在主机系统上的已知位置,并使主机系统上的工具和应用程序可以轻松访问这些文件。 缺点是,用户需要确保目录存在,例如,主机系统上的目录权限和其他安全机制是正确设置的。</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">(PS:总结一下,两种方式,一种是放到容器内部,另一种是放到容器外部)</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">由docker自己管理这种默认行为就不在这里演示了,下面演示一下将容器外部的目录挂载到容器这种方式:</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">首先,在宿主机上创建一个目录,比如叫 /my/own/datadir</span></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">然后,在启动容器的时候使用 -v 选项挂载目录</span></p>
<div>
<pre><code style="font-size: 16px">docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">这个命令中,-v /my/own/datadir:/data/db 将主机系统上的/my/own/datadir目录挂载到容器的/data/db。docker容器安装mongodb时,默认情况下MongoDB会将它的数据存放在<strong>/data/db</strong>目录中。</span></p>
<p><img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220108175349498-736155215.png" alt=""></p>
<p><img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220108175407758-155782667.png" alt=""></p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 16px">备忘录</span></p>
<div>
<pre><code style="font-size: 16px">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
</code></pre>
</div>
<p><span style="font-size: 18px; font-family: "Microsoft YaHei"">10、创建数据库转储(dump)</span></p>
<div>
<pre><code style="font-size: 16px">docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive
</code></pre>
</div>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">11、备忘录</span></p>
<pre><code style="font-size: 16px">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
</code></pre>
<p> <img src="https://img2020.cnblogs.com/blog/874963/202201/874963-20220108184010223-322536945.png" alt=""></p>
<p> </p>
<p><span style="font-family: "Microsoft YaHei"; font-size: 18px">文档:</span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-size: 16px; font-family: "Microsoft YaHei""><span style="color: rgba(0, 0, 255, 1)">https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/</span></span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-size: 16px; font-family: "Microsoft YaHei""><span style="color: rgba(0, 0, 255, 1)">https://registry.hub.docker.com/_/mongo</span> </span></p>
<p><span style="color: rgba(0, 0, 255, 1); font-size: 16px; font-family: "Microsoft YaHei""><span style="color: rgba(0, 0, 255, 1)">https://docs.docker.com/engine/reference/commandline/network/</span> </span></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/cjsblog/p/15776066.html
頁:
[1]