从零开始:在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
相关推荐
Abladol-aj38 分钟前
并发和并行的基础知识
java·linux·windows
清水白石00839 分钟前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug
JunLan~5 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
Python私教5 小时前
model中能定义字段声明不存储到数据库吗
数据库·oracle
方竞6 小时前
Linux空口抓包方法
linux·空口抓包
sun0077007 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
海岛日记7 小时前
centos一键卸载docker脚本
linux·docker·centos
AttackingLin8 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python