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

1 前言

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

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

2 安装部署

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

本次安装环境如下:

程序版本
MongoDB7.0.6
Mongosh2.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
  • 26
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有勇气的牛排

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值