从零开始:在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
相关推荐
UFIT9 分钟前
postgresql日常维护
运维·服务器
swcq_10 分钟前
DS18B20 温度传感器实验探索与实践分享
数据库
爱莉希雅&&&11 分钟前
shell脚本之函数详细解释及运用
linux·运维
麟城Lincoln23 分钟前
【Linux笔记】防火墙firewall与相关实验(iptables、firewall-cmd、firewalld)
linux·服务器·笔记·iptables·防火墙·firewalld·firewall
冷冷清清中的风风火火25 分钟前
linux查看本机服务器的外网IP命令
linux·服务器·tcp/ip
dal118网工任子仪30 分钟前
pikachu靶场 暴力破解
运维·服务器
安审若无32 分钟前
实时监控服务器CPU、内存和磁盘使用率
运维·服务器
Rverdoser34 分钟前
弱网服务器群到底有什么用
运维·服务器
风123456789~1 小时前
【Oracle 专栏】清理用户及表空间
数据库·oracle
珊珊而川1 小时前
docker常用指令
运维·docker·容器