1. 首页 > MongoDB教程 > 正文

MongoDB教程FG010-MongoDB Shell运维操作实战

本文档风哥主要介绍MongoDB Shell运维操作相关知识,包括MongoDB Shell的概念、功能、环境配置、连接管理、基础操作、高级操作、监控操作、维护操作、故障排查等内容,风哥教程参考MongoDB官方文档The mongo Shell / mongosh内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 MongoDB Shell的概念

MongoDB Shell(mongosh)是MongoDB的交互式JavaScript接口,允许用户通过命令行与MongoDB数据库进行交互。它提供了一个强大的环境,用于管理和操作MongoDB数据库,执行查询、管理集合和文档、执行管理操作等。更多视频教程www.fgedu.net.cn

MongoDB Shell的特点:

  • 交互式命令行工具
  • 支持JavaScript语法
  • 提供丰富的内置方法
  • 可执行JavaScript脚本
  • 支持自动补全
  • 可连接到本地或远程MongoDB实例

1.2 MongoDB Shell的功能

MongoDB Shell的主要功能包括:

  • 数据库管理:创建、查看、删除数据库
  • 集合管理:创建、查看、删除集合
  • 文档操作:插入、查询、更新、删除文档
  • 索引管理:创建、查看、删除索引
  • 用户管理:创建、管理用户和角色
  • 系统监控:查看系统状态、性能指标
  • 备份恢复:执行备份和恢复操作
  • 脚本执行:运行JavaScript脚本

1.3 MongoDB Shell的环境配置

MongoDB Shell的环境配置包括:

# 检查MongoDB Shell版本
$ mongosh –version
mongosh 2.2.5

# 配置MongoDB Shell环境变量
export PATH=$PATH:/mongodb/app/bin

# 配置MongoDB Shell启动参数
mongosh –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin

# 配置MongoDB Shell配置文件
# ~/.mongorc.js
if (typeof prompt === ‘function’) {
prompt = function() {
return db + ‘> ‘;
};
}

// 自定义函数
function listDatabases() {
db.adminCommand({ listDatabases: 1 });
}

风哥提示:MongoDB Shell是DBA日常运维的重要工具,掌握其使用方法对于高效管理MongoDB数据库至关重要。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 MongoDB Shell使用规划

MongoDB Shell使用规划要点:

# 连接管理规划
– 生产环境:使用认证连接
– 测试环境:可使用无认证连接
– 远程连接:使用SSL加密

# 操作权限规划
– 只读权限:用于监控和查询
– 读写权限:用于日常维护
– 管理员权限:用于系统管理

# 脚本管理规划
– 定期执行脚本:备份、监控
– 应急处理脚本:故障恢复
– 自动化脚本:日常维护

# 日志管理规划
– 操作日志:记录重要操作
– 错误日志:捕获执行错误
– 审计日志:记录敏感操作

2.2 MongoDB Shell安全建议

MongoDB Shell安全建议:

# 安全连接
– 使用–username和–password参数
– 使用–authenticationDatabase指定认证数据库
– 生产环境使用SSL加密连接

# 权限控制
– 遵循最小权限原则
– 为不同角色创建不同用户
– 定期更新密码

# 操作安全
– 避免在生产环境执行危险操作
– 执行重要操作前进行备份
– 记录敏感操作日志

# 环境安全
– 限制MongoDB Shell的访问权限
– 避免在公共环境中暴露连接信息
– 使用环境变量存储敏感信息

2.3 MongoDB Shell最佳实践

MongoDB Shell最佳实践:

  • 使用连接字符串:简化连接过程
  • 启用命令历史:方便重复执行命令
  • 使用批量操作:提高执行效率
  • 编写可复用脚本:减少重复工作
  • 定期备份:执行重要操作前备份
  • 监控执行时间:优化性能
  • 使用索引:提高查询效率
  • 限制返回结果:避免内存溢出
生产环境建议:MongoDB Shell操作应遵循安全最佳实践,使用认证连接,限制权限,记录操作日志,定期备份数据。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 MongoDB Shell连接管理

3.1.1 MongoDB Shell连接本地实例

# 连接到本地默认端口
$ mongosh

Current Mongosh Log ID: 6614f8a0a1b2c3d4e5f6g7h8
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB: 7.0.5
Using Mongosh: 2.2.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test>

# 连接到指定数据库
$ mongosh fgedudb

Current Mongosh Log ID: 6614f8a0a1b2c3d4e5f6g7h8
Connecting to: mongodb://127.0.0.1:27017/fgedudb?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB: 7.0.5
Using Mongosh: 2.2.5

fgedudb>

3.1.2 MongoDB Shell连接远程实例

# 连接到远程实例
$ mongosh –host 192.168.1.100 –port 27017

Current Mongosh Log ID: 6614f8a0a1b2c3d4e5f6g7h8
Connecting to: mongodb://192.168.1.100:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB: 7.0.5
Using Mongosh: 2.2.5

test>

# 使用认证连接
$ mongosh –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin

Current Mongosh Log ID: 6614f8a0a1b2c3d4e5f6g7h8
Connecting to: mongodb://192.168.1.100:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB: 7.0.5
Using Mongosh: 2.2.5

admin>

3.2 MongoDB Shell基础操作

3.2.1 MongoDB Shell数据库操作

# 查看当前数据库
fgedudb> db
fgedudb

# 列出所有数据库
fgedudb> show dbs
admin 40.00 KiB
config 12.00 KiB
fgedudb 40.00 KiB
local 40.00 KiB

# 创建/切换数据库
fgedudb> use fgedudb01
switched to db fgedudb01

# 删除当前数据库
fgedudb01> db.dropDatabase()
{ “ok” : 1, “dropped” : “fgedudb01” }

3.2.2 MongoDB Shell集合操作

# 列出当前数据库的集合
fgedudb> show collections
fgedu_users
fgedu_orders

# 创建集合
fgedudb> db.createCollection(“fgedu_products”)
{ “ok” : 1 }

# 删除集合
fgedudb> db.fgedu_products.drop()
true

3.2.3 MongoDB Shell文档操作

# 插入文档
fgedudb> db.fgedu_users.insertOne({name: “fgedu01”, age: 25, email: “fgedu01@fgedu.net.cn”})
{
acknowledged: true,
insertedId: ObjectId(“6614f8a0a1b2c3d4e5f6g7h8”)
}

# 查询文档
fgedudb> db.fgedu_users.find()
[ { _id: ObjectId(“6614f8a0a1b2c3d4e5f6g7h8”), name: ‘fgedu01’, age: 25, email: ‘fgedu01@fgedu.net.cn’ } ]

# 更新文档
fgedudb> db.fgedu_users.updateOne({name: “fgedu01”}, { $set: { age: 26 } })
{
acknowledged: true,
matchedCount: 1,
modifiedCount: 1,
upsertedId: null
}

# 删除文档
fgedudb> db.fgedu_users.deleteOne({name: “fgedu01”})
{
acknowledged: true,
deletedCount: 1
}

3.3 MongoDB Shell高级操作

3.3.1 MongoDB Shell索引操作

# 创建索引
fgedudb> db.fgedu_users.createIndex({name: 1})
name_1

# 查看索引
fgedudb> db.fgedu_users.getIndexes()
[
{ v: 2, key: { _id: 1 }, name: ‘_id_’ },
{ v: 2, key: { name: 1 }, name: ‘name_1’ }
]

# 删除索引
fgedudb> db.fgedu_users.dropIndex(“name_1”)
{ nIndexesWas: 2, ok: 1 }

3.3.2 MongoDB Shell聚合操作

# 插入测试数据
fgedudb> db.fgedu_orders.insertMany([
{customer: “fgedu01”, amount: 100, date: new Date(“2026-04-01”)},
{customer: “fgedu02”, amount: 200, date: new Date(“2026-04-01”)},
{customer: “fgedu01”, amount: 150, date: new Date(“2026-04-02”)},
{customer: “fgedu03”, amount: 300, date: new Date(“2026-04-02”)}
])
{
acknowledged: true,
insertedIds: {
‘0’: ObjectId(“6614f8a0a1b2c3d4e5f6g7h9”),
‘1’: ObjectId(“6614f8a0a1b2c3d4e5f6g7h0”),
‘2’: ObjectId(“6614f8a0a1b2c3d4e5f6g7h1”),
‘3’: ObjectId(“6614f8a0a1b2c3d4e5f6g7h2”)
}
}

# 聚合查询
fgedudb> db.fgedu_orders.aggregate([
{ $group: { _id: “$customer”, total: { $sum: “$amount” } } },
{ $sort: { total: -1 } }
])
[
{ _id: ‘fgedu03’, total: 300 },
{ _id: ‘fgedu01’, total: 250 },
{ _id: ‘fgedu02’, total: 200 }
]

风哥提示:MongoDB Shell的高级操作可以帮助DBA更高效地管理数据库,包括索引管理、聚合查询、用户管理等。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 MongoDB Shell监控操作

4.1.1 MongoDB Shell系统状态监控

# 查看系统状态
fgedudb> db.serverStatus()
{
host: ‘fgedu.net.cn’,
version: ‘7.0.5’,
process: ‘mongod’,
pid: 12345,
uptime: 3600,
uptimeMillis: 3600000,
uptimeEstimate: 3600,
localTime: ISODate(“2026-04-08T08:00:00Z”),

}

# 查看数据库统计信息
fgedudb> db.stats()
{
db: ‘fgedudb’,
collections: 2,
views: 0,
objects: 5,
avgObjSize: 100,
dataSize: 500,
storageSize: 4096,
indexes: 2,
indexSize: 8192,
totalSize: 12288,

}

# 查看集合统计信息
fgedudb> db.fgedu_orders.stats()
{
ns: ‘fgedudb.fgedu_orders’,
size: 500,
count: 4,
avgObjSize: 125,
storageSize: 4096,
indexes: 1,
indexSize: 8192,

}

4.1.2 MongoDB Shell性能监控

# 查看操作性能
fgedudb> db.currentOp()
{
inprog: [
{
opid: 1234,
active: true,
secs_running: 0,
microsecs_running: 1000,
op: ‘query’,
ns: ‘fgedudb.fgedu_users’,
query: { name: ‘fgedu01’ },

}
],

}

# 查看慢查询
fgedudb> db.getSiblingDB(“admin”).aggregate([
{ $currentOp: { allUsers: true, idleConnections: false } },
{ $match: { “secs_running”: { $gt: 1 } } }
])

4.2 MongoDB Shell维护操作

4.2.1 MongoDB Shell数据备份

# 使用mongodump备份
$ mongodump –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb –out /mongodb/backup

2026-04-08T08:00:00.000+0000 writing fgedudb.fgedu_users to /mongodb/backup/fgedudb/fgedu_users.bson
2026-04-08T08:00:00.000+0000 writing fgedudb.fgedu_orders to /mongodb/backup/fgedudb/fgedu_orders.bson
2026-04-08T08:00:00.000+0000 writing fgedudb.fgedu_users metadata to /mongodb/backup/fgedudb/fgedu_users.metadata.json
2026-04-08T08:00:00.000+0000 writing fgedudb.fgedu_orders metadata to /mongodb/backup/fgedudb/fgedu_orders.metadata.json
2026-04-08T08:00:00.000+0000 done dumping fgedudb (2 collections)

# 使用mongorestore恢复
$ mongorestore –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb /mongodb/backup/fgedudb

2026-04-08T08:00:00.000+0000 preparing collections to restore from
2026-04-08T08:00:00.000+0000 reading metadata for fgedudb.fgedu_users from /mongodb/backup/fgedudb/fgedu_users.metadata.json
2026-04-08T08:00:00.000+0000 restoring fgedudb.fgedu_users from /mongodb/backup/fgedudb/fgedu_users.bson
2026-04-08T08:00:00.000+0000 reading metadata for fgedudb.fgedu_orders from /mongodb/backup/fgedudb/fgedu_orders.metadata.json
2026-04-08T08:00:00.000+0000 restoring fgedudb.fgedu_orders from /mongodb/backup/fgedudb/fgedu_orders.bson
2026-04-08T08:00:00.000+0000 done restoring fgedudb (2 collections)

4.2.2 MongoDB Shell索引维护

# 重建索引
fgedudb> db.fgedu_users.reIndex()
{
nIndexesWas: 2,
nIndexes: 2,
indexes: [
{ v: 2, key: { _id: 1 }, name: ‘_id_’ },
{ v: 2, key: { name: 1 }, name: ‘name_1’ }
],
ok: 1
}

# 压缩集合
fgedudb> db.fgedu_orders.compact()
{ “ok” : 1 }

4.3 MongoDB Shell故障排查

4.3.1 MongoDB Shell连接故障排查

# 检查MongoDB服务状态
$ systemctl status mongod
● mongod.service – MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2026-04-08 08:00:00 UTC; 1h ago
Docs: https://docs.mongodb.org/manual
Main PID: 12345 (mongod)
CGroup: /system.slice/mongod.service
└─12345 /mongodb/app/bin/mongod –config /mongodb/app/etc/mongod.conf

# 检查网络连接
$ telnet 192.168.1.100 27017
Trying 192.168.1.100…
Connected to 192.168.1.100.
Escape character is ‘^]’.

# 检查MongoDB日志
$ tail -n 100 /mongodb/fgdata/log/mongod.log
2026-04-08T08:00:00.000+0000 I NETWORK [listener] Listening on 192.168.1.100:27017
2026-04-08T08:00:00.000+0000 I NETWORK [listener] waiting for connections on port 27017

4.3.2 MongoDB Shell性能故障排查

# 查看慢查询日志
fgedudb> db.adminCommand({ getLog: “slowops” })

# 查看系统性能指标
fgedudb> db.serverStatus().mem
{
resident: 1024,
virtual: 2048,
mapped: 512,
mappedWithJournal: 1024
}

fgedudb> db.serverStatus().connections
{
current: 10,
available: 5000,
totalCreated: 100
}

# 查看操作执行计划
fgedudb> db.fgedu_users.find({name: “fgedu01”}).explain()
{
queryPlanner: {
plannerVersion: 1,
namespace: ‘fgedudb.fgedu_users’,
indexFilterSet: false,
parsedQuery: { name: { ‘$eq’: ‘fgedu01’ } },
winningPlan: {
stage: ‘FETCH’,
inputStage: {
stage: ‘IXSCAN’,
keyPattern: { name: 1 },
indexName: ‘name_1’,
isMultiKey: false,
multiKeyPaths: { name: [] },
isUnique: false,
isSparse: false,
isPartial: false,
indexVersion: 2,
direction: ‘forward’,
indexBounds: { name: [“fgedu01”, “fgedu01”] }
}
},

},

}

生产环境建议:MongoDB Shell故障排查应结合系统日志、性能指标和执行计划进行综合分析,快速定位问题并采取相应的解决措施。from MongoDB视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 MongoDB Shell使用技巧

MongoDB Shell使用技巧:

  • 使用命令历史:按上下箭头查看历史命令
  • 使用自动补全:按Tab键自动补全命令和集合名
  • 使用帮助命令:输入help查看可用命令
  • 使用批量操作:使用insertMany、updateMany等批量操作提高效率
  • 使用聚合管道:复杂查询使用聚合管道提高性能
  • 使用索引:为常用查询创建合适的索引
  • 使用限制条件:查询时使用limit限制返回结果
  • 使用投影:查询时使用projection只返回需要的字段

5.2 MongoDB Shell脚本开发

#!/usr/bin/env mongosh
# daily_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

// 连接到MongoDB实例
const conn = new Mongo(“192.168.1.100:27017”);
const db = conn.getDB(“admin”);

// 认证
db.auth(“fgedu”, “fgedu123”);

// 检查系统状态
print(“=== 系统状态 ===”);
const status = db.serverStatus();
print(“主机名: ” + status.host);
print(“版本: ” + status.version);
print(“运行时间: ” + status.uptime + “秒”);
print(“连接数: ” + status.connections.current + “/” + status.connections.available);

// 检查数据库状态
print(“\n=== 数据库状态 ===”);
const dbs = db.adminCommand({ listDatabases: 1 }).databases;
dbs.forEach(function(dbInfo) {
const dbName = dbInfo.name;
const dbSize = dbInfo.sizeOnDisk;
print(dbName + “: ” + (dbSize / 1024 / 1024).toFixed(2) + “MB”);
});

// 检查慢查询
print(“\n=== 慢查询 ===”);
const slowOps = db.adminCommand({ getLog: “slowops” });
if (slowOps.log.length > 0) {
print(“发现” + slowOps.log.length + “条慢查询”);
slowOps.log.slice(-5).forEach(function(op) {
print(op);
});
} else {
print(“无慢查询”);
}

print(“\n检查完成!”);

5.3 MongoDB Shell自动化运维

MongoDB Shell自动化运维建议:

  • 定期备份:使用Shell脚本定期执行备份操作
  • 监控告警:使用Shell脚本监控系统状态,设置告警
  • 自动修复:使用Shell脚本自动修复常见问题
  • 性能优化:使用Shell脚本定期分析性能,进行优化
  • 安全检查:使用Shell脚本定期检查安全配置
  • 版本管理:使用Shell脚本管理版本升级
风哥提示:MongoDB Shell是DBA的重要工具,通过掌握其使用技巧和脚本开发,可以大大提高运维效率,减少人工操作,实现自动化管理。更多视频教程www.fgedu.net.cn

持续改进:MongoDB Shell的使用是一个持续学习和改进的过程,建议定期review和优化Shell脚本,不断提高运维效率和系统稳定性。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息