有勇气的牛排博客

从零开始:在linux系统安装MongoDB数据完整指南 新手常用命令

有勇气的牛排 1052 数据库 2024-07-25 22:43:19

1 前言

  • MongoDB 是为快速开发互联网应用而设计的数据库系统。
  • MongoDB 的设计目标是极简、灵活、作为 Web 应用栈的一部分。
  • MongoDB 的数据模型是面向文档的,所谓文档是一种类似于json的结构。

官网教程:https://www.mongodb.com/docs/manual/

2 安装部署

  • MongoDB 的版本偶数版本为稳定版,奇数版本为开发版。
  • MongoDB 对为 32 位系统支持不佳,所以3.2版本疑惑没有再对32位系统的支持。
  • 在6.0版本以后,MongoDB 将客户端与服务端进行了分离需要进行单独下载。

本次安装环境如下:

程序 版本
MongoDB 7.0.6
Mongosh 2.1.4

2.1 windows 安装

2.1.1 windows (Server端)

下载

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

配置环境变量:

C:\Program Files\MongoDB\Server\7.0\bin

创建数据库存放目录:

C:\data\db

2.1.2 windows (客户端)

下载方式一:

在服务端版本中,自带powershell下载脚本: InstallCompass.ps1

2.2 cents7 安装

2.2.1 server 下载安装

https://www.mongodb.com/download-center/community/releases

下载方式二:

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

image.png

wget https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-7.0.6.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-7.0.6.tgz mv mongodb-linux-x86_64-rhel70-7.0.6 mongodb cd mongodb

将MongoDB服务添加到 service 启动

2.2.2 客户端

https://github.com/mongodb-js/mongosh/releases

tar -zxvf mongosh-2.1.4-linux-x64.tgz mv mongosh-2.1.4-linux-x64 mongosh

2.2.3 环境变量

vim /etc/profile
export PATH=/usr/local/mongodb/mongodb/bin:$PATH export PATH=/usr/local/mongodb/mongosh/bin:$PATH
source /etc/profile

2.3 Docker容器安装

3 服务端启动

原创:有勇氣的牛排
https://www.couragesteak.com/article/458

2.3 配置服务端 mongodb.conf

mkdir -p /usr/local/mongodb/{db, log} chmod 777 /usr/local/mongodb/*
vim /usr/local/mongodb/mongodb.conf
systemLog:
  destination: file
  logAppend: true
  path: "/usr/local/mongodb/log/mongod.log"

storage:
  dbPath: "/usr/local/mongodb/db"

processManagement:
  fork: true
  pidFilePath: "/usr/local/mongodb/mongod.pid"
  timeZoneInfo: "/usr/share/zoneinfo"

net:
  port: 27017
  bindIp: 0.0.0.0
  
security:
  authorization: enabled

3.1 配置文件启动/关闭

启动

mongod --config /usr/local/mongodb/mongodb.conf

关闭

mongod -f /usr/local/mongodb/mongodb.conf --shutdown

3.2 查看是否启动

查看进程

ps -ef | grep mongodb

查看MongoDB进程

检查端口

netstat -tunlp | grep mongo

检查MongoDB端口

3.4 停止服务

kill进程(不推荐)

kill -9 进程号

MongoDB 内置命令

db.shutdownServer()

3.5 安全优化

3.5.1 不推荐root启动

创建普通用户mongo(禁用登录),运行mogod服务端

# 创建一个名为 "mongo" 的用户组,-g 777 指定组标识符(GID)为 777 groupadd mongo -g 777 # 创建一个属于 "mongo" 用户组的用户 "mongo" # -g 777 指定主组为 "mongo",-M 表示不创建用户的主目录 # -s /sbin/nologin 指定用户登录时使用的Shell为 /sbin/nologin,通常用于服务账号 useradd mongo -g 777 -M -s /sbin/nologin # 查看用户 "mongo" 的详细信息,包括用户标识符(UID)、组标识符(GID)等 id mongo

3.5.2 启动脚本 systemd.service 脚本

vim /etc/systemd/system/mongodb.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/usr/local/mongodb/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf --shutdown
PrivateTmp=true

[Install]
WantedBy=multi-user.target

目录授权

sudo chown -R mongo:mongo /usr/local/mongodb/*

重载配置文件

systemctl daemon-reload

启动并且设置开机启动

systemctl start mongodb

关闭

systemctl stop mongodb

查看启动状态

systemctl status mongodb

设置永久开机自启

systemctl enable mongodb

3.5.3 大内存页 关闭 hugepage

必须永久生效

vim /etc/rc.d/rc.local
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

添加执行权限

chmod +x /etc/rc.d/rc.local

4 客户端连接

4.1 基本连接

规则如下:

mongo ip:port/数据库 -u 用户名 -p 密码

案例

# 无用户验证 mongosh 192.168.56.20:27017 # 用户验证 mongosh 192.168.56.20:27017 -u cs_admin -p 123456

MongoDB连接

程序连接

mongodb://<username>:<password>@node1:27017,node2:27017,node3:27017/?replicaSet=myReplicaSet

4.2 初始化管理员用户

然后,在 MongoDB shell 中执行以下命令创建一个管理员用户(确保替换 <admin_username><admin_password> 为实际的用户名和密码):

use admin
db.createUser({ user: "cs_admin", pwd: "123456", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })

启动

mongod --config /usr/local/mongodb/mongodb.conf

关闭

mongod -f /usr/local/mongodb/mongodb.conf --shutdown

5 mongo-express 可视化管理

vim docker-compose.yml
version: '3' services: mongo-express: image: mongo-express environment: - ME_CONFIG_MONGODB_SERVER=mongo # 指定 MongoDB 服务器的主机名(这是 MongoDB 容器的服务名称) ports: - "8081:8081" depends_on: - mongo mongo: image: mongo ports: - "27017:27017"
version: '3' services: mongo-express: image: mongo-express environment: - ME_CONFIG_MONGODB_SERVER=mongo # 指定 MongoDB 服务器的主机名(这是 MongoDB 容器的服务名称) ports: - "8081:8081"

启动

docker-compose up -d

6 数据库操作

授权用户数据库

创建超级用户

db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]}) // readWriteAnyDatabase:只在admin数据库中可用,赋予对应用户所有数据库的读写权限 // userAdminAnyDatabase:只在admin数据库中可用,赋予对应用户所有数据库的userAdmin权限
db.auth("admin","123456")

创建新数据库

use cs_tool db.test.insert({})

切换到数据库 cs_tool,创建一个读写用户

db.createUser({user:"user_B",pwd:"123456",roles:[{role:"readWrite",db:"cs_tool"}]})

6.1 创建/切换数据库

use 数据库名

MongoDB创建/选择数据库

创建数据库后,只有有数据库后,库才会生成

6.2 查询

6.2.1 查询所有数据库

show dbs
test> show dbs test # 登录时默认的库 admin 132.00 KiB # 系统预留库,Mongodb的系统管理库,如停止数据库进程,需进到这里 config 108.00 KiB # 本地预留库,存储关键日志 local 256.00 KiB # 配置信息库,保存如分片的信息

6.2.2 查询库中的集合

相当于:show tables;

show collections

6.2 删除数据库

db.dropDatabse()

5.2 创建集合、插入数据

db.user.insertOne({name: "cs", age: "20", id: 1})

报错、警告

open file too low

**Soft rlimits for open file descriptors too low**

vim /etc/security/limits.conf
* soft nofile 64000 * hard nofile 64000

Soft rlimits for open file descriptors too low

vm.max_map_count is too low

sudo sysctl -w vm.max_map_count=262144

为了使这个更改永久生效,您可以将其添加到 /etc/sysctl.conf/etc/sysctl.d/ 下的一个文件中。

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

留言

专栏
文章
加入群聊