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

avatar
作者
猴君
阅读量:0

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 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!