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

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

shell 复制代码
wget https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-7.0.6.tgz
shell 复制代码
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

shell 复制代码
tar -zxvf mongosh-2.1.4-linux-x64.tgz
mv mongosh-2.1.4-linux-x64 mongosh
2.2.3 环境变量
shell 复制代码
vim /etc/profile
shell 复制代码
export PATH=/usr/local/mongodb/mongodb/bin:$PATH
export PATH=/usr/local/mongodb/mongosh/bin:$PATH
shell 复制代码
source /etc/profile

2.3 Docker容器安装

3 服务端启动

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

2.3 配置服务端 mongodb.conf

shell 复制代码
mkdir -p /usr/local/mongodb/{db, log}
chmod 777 /usr/local/mongodb/*
shell 复制代码
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 配置文件启动/关闭

启动

shell 复制代码
mongod --config /usr/local/mongodb/mongodb.conf

关闭

shell 复制代码
mongod -f /usr/local/mongodb/mongodb.conf --shutdown

3.2 查看是否启动

查看进程

shell 复制代码
ps -ef | grep mongodb

检查端口

shell 复制代码
netstat -tunlp | grep mongo

3.4 停止服务

kill进程(不推荐)

shell 复制代码
kill -9 进程号

MongoDB 内置命令

shell 复制代码
db.shutdownServer()

3.5 安全优化

3.5.1 不推荐root启动

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

shell 复制代码
# 创建一个名为 "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 脚本
shell 复制代码
vim /etc/systemd/system/mongodb.service
conf 复制代码
[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

目录授权

shell 复制代码
sudo chown -R mongo:mongo /usr/local/mongodb/*

重载配置文件

shell 复制代码
systemctl daemon-reload

启动并且设置开机启动

shell 复制代码
systemctl start mongodb

关闭

shell 复制代码
systemctl stop mongodb

查看启动状态

shell 复制代码
systemctl status mongodb

设置永久开机自启

shell 复制代码
systemctl enable mongodb
3.5.3 大内存页 关闭 hugepage

必须永久生效

shell 复制代码
vim /etc/rc.d/rc.local
shell 复制代码
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag

添加执行权限

shell 复制代码
chmod +x /etc/rc.d/rc.local

4 客户端连接

4.1 基本连接

规则如下:

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

案例

shell 复制代码
# 无用户验证
mongosh 192.168.56.20:27017

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

程序连接

shell 复制代码
mongodb://<username>:<password>@node1:27017,node2:27017,node3:27017/?replicaSet=myReplicaSet

4.2 初始化管理员用户

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

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

启动

shell 复制代码
mongod --config /usr/local/mongodb/mongodb.conf

关闭

shell 复制代码
mongod -f /usr/local/mongodb/mongodb.conf --shutdown

5 mongo-express 可视化管理

shell 复制代码
vim docker-compose.yml
shell 复制代码
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"
yaml 复制代码
version: '3'
services:
  mongo-express:
    image: mongo-express
    environment:
      - ME_CONFIG_MONGODB_SERVER=mongo  # 指定 MongoDB 服务器的主机名(这是 MongoDB 容器的服务名称)
    ports:
      - "8081:8081"

启动

shell 复制代码
docker-compose up -d

6 数据库操作

授权用户数据库

创建超级用户

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

创建新数据库

shell 复制代码
use cs_tool
db.test.insert({})

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

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

6.1 创建/切换数据库

shell 复制代码
use 数据库名

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

6.2 查询

6.2.1 查询所有数据库
shell 复制代码
show dbs
shell 复制代码
test> show dbs
test				# 登录时默认的库
admin   132.00 KiB	# 系统预留库,Mongodb的系统管理库,如停止数据库进程,需进到这里
config  108.00 KiB	# 本地预留库,存储关键日志
local   256.00 KiB	# 配置信息库,保存如分片的信息
6.2.2 查询库中的集合

相当于:show tables;

shell 复制代码
show collections

6.2 删除数据库

shell 复制代码
db.dropDatabse()

5.2 创建集合、插入数据

shell 复制代码
db.user.insertOne({name: "cs", age: "20", id: 1})

报错、警告

open file too low

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

shell 复制代码
vim /etc/security/limits.conf
c 复制代码
*         soft    nofile    64000
*         hard    nofile    64000

vm.max_map_count is too low

shell 复制代码
sudo sysctl -w vm.max_map_count=262144

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

shell 复制代码
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
相关推荐
会飞的土拨鼠呀4 分钟前
Flannel是什么,如何安装Flannel
运维·云原生·kubernetes
木与子不厌6 分钟前
微服务自定义过滤器
运维·数据库·微服务
达帮主12 分钟前
7.C语言 宏(Macro) 宏定义,宏函数
linux·c语言·算法
派可数据BI可视化19 分钟前
连锁餐饮行业数据可视化分析方案
大数据·数据库·数据仓库·数据分析·商业智能bi
dbcat官方21 分钟前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
行思理24 分钟前
Linux 下SVN新手操作手册
linux·运维·svn
青年有志29 分钟前
深入浅出 MyBatis | CRUD 操作、配置解析
数据库·tomcat·mybatis
数据的世界0132 分钟前
SQL创建和操纵表
数据库·sql
初学者丶一起加油35 分钟前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
Echo flower35 分钟前
mybatis-plus自动填充时间的配置类实现
java·数据库·mybatis