MongoDB 运维命令速查表

作为运维,日常应对 MongoDB 的高频排障、权限分配、性能调优和备份恢复,不需要去记繁杂的开发级查询语法。我们关注的核心是:看状态、查性能、杀会话、查空间、保数据

本文总结了 MongoDB 运维最常用的实战命令

一、 登录与连接 (Connection)

作为运维,强烈建议习惯使用集群路由模式登录,让系统自动帮你找主库,避免在从库执行写命令报错。

# 终极标准连接命令(自带主库路由、密码认证)
mongosh "mongodb://root:YOUR_PASS@IP1:27017,IP2:27017,IP3:27017/?replicaSet=prodCluster&authSource=admin"

二、 账号与权限管理 (RBAC)

注:分配权限必须在主库的对应数据库下执行。

// 1. 给开发分配【只读】排障账号(最常用,防删库)
use app_db
db.createUser({
  user: "dev_readonly",
  pwd: "Password123!",
  roles: [ { role: "read", db: "app_db" } ]
})

// 2. 给开发分配【读写】账号(测试环境用)
use app_db
db.createUser({
  user: "dev_rw",
  pwd: "Password123!",
  roles: [ { role: "readWrite", db: "app_db" } ]
})

// 3. 修改密码 & 删除账号
db.changeUserPassword("dev_readonly", "NewPass666!")
db.dropUser("dev_readonly")

// 4. 提权(例如给自己补充缺失的真正的 root 角色)
use admin
db.grantRolesToUser("root", [{ role: "root", db: "admin" }])

三、 集群健康与主从监控 (Cluster Health)

注:日常巡检必备,需在 admin 库执行。

// 1. 查看集群总体状态(节点是否健康、谁是主谁是从)
rs.status()

// 2. 快速判断当前节点角色
rs.isMaster()  // 新版推荐使用 hello()

// 3. 查看主从延迟(极其重要,监控从库落后主库多少秒)
rs.printSecondaryReplicationInfo()

// 4. 查看 Oplog 窗口期(评估断网多久以内还能追上数据)
rs.printReplicationInfo()

四、 性能排障与查杀慢查询 (Troubleshooting)

注:对应 MySQL 的 show processlist,线上救火专用。

// 1. 抓出正在执行且超过 3 秒的“慢查询”或“卡死会话”
db.currentOp({
  "active": true,
  "secs_running": { "$gt": 3 }
})

// 2. 强杀卡死的会话(拿到上一步结果里的 opid)
db.killOp(123456)

// 3. 动态开启慢查询日志(记录超过 100ms 的语句,1代表开启慢查询)
db.setProfilingLevel(1, { slowms: 100 })

// 4. 查看最近最慢的 5 条 SQL,发给开发优化
db.system.profile.find().sort({millis:-1}).limit(5).pretty()

// 5. 运维红线:后台建索引(绝对不能前台建,防锁表!)
db.users.createIndex({ "username": 1 }, { background: true })

五、 空间与容量统计 (Storage Stats)

// 1. 查看所有库的大小
show dbs

// 2. 查看当前库的真实数据大小和磁盘占用
db.stats()

// 3. 查看单张表(集合)的详细大小
db.users.stats()

六、 备份与恢复 (Backup & Restore)

注:这是 OS 层面的 Linux 终端命令,在 Shell 中执行,不要在 mongosh 内执行。

1. 逻辑备份与恢复(PITR)

# 企业级全库热备(不影响主库 IO + 保证绝对一致性)
mongodump   --uri="mongodb://root:YOUR_PASS@IP1:27017,IP2:27017,IP3:27017/?replicaSet=prodCluster&authSource=admin&readPreference=secondary"   --oplog --gzip --out=/data/backup/mongo_full

# 企业级全库恢复(重放增量日志,完美恢复到备份结束的精确时间点)
mongorestore   --uri="mongodb://root:YOUR_PASS@IP1:27017,IP2:27017,IP3:27017/?replicaSet=prodCluster&authSource=admin"   --oplogReplay --gzip /data/backup/mongo_full

# 单库导出(注意:单库导出不支持 --oplog 参数)
mongodump   --uri="mongodb://.../?authSource=admin"   --db=core_db --gzip --out=/data/backup/mongo_single

2. 物理备份锁(TB 级数据快照)

当数据量达到数百 GB 甚至 TB 级别,逻辑备份过慢时,采用底层磁盘快照是最佳方案。

# 进入 mongosh 执行,强制刷盘并锁死写入:
db.fsyncLock()

# ... 此时退出终端,去执行 LVM / 阿里云 EBS 等云盘快照 ...

# 快照完成后,立即回到 mongosh 解锁,恢复业务写入:
db.fsyncUnlock()  

总结:熟练掌握这些核心命令,配合完善的集群拓扑规划与 Prometheus/Grafana 监控体系,足以应对绝大多数企业级 MongoDB 运维与突发排障需求。

评论