详细分析 ▾
运行时依赖
版本
首次发布:完整的MongoDB管理工具包
安装命令
点击复制技能文档
完整的 MongoDB 管理工具包,涵盖数据库管理、性能优化、备份/还原操作以及副本集管理。适用于本地与远程 MongoDB 实例。
先决条件
- 已安装 MongoDB(服务器和/或客户端工具)
mongosh(MongoDB Shell)或旧版mongo客户端mongodump与mongorestore工具- 适当的数据库权限
- 可访问目标 MongoDB 实例的网络
使用方式
连接管理
基本连接:
# Local instance
mongosh
# Remote instance
mongosh "mongodb://localhost:27017/mydb"
mongosh "mongodb://user:pass@host:27017/mydb"
# With authentication
mongosh --host localhost --port 27017 --username admin --password --authenticationDatabase admin
# SSL/TLS connection
mongosh "mongodb://host:27017/mydb?ssl=true"
连接字符串示例:
# Local development
mongosh "mongodb://localhost:27017/clawd_memory_db"
# Remote with auth
mongosh "mongodb://dbuser:password@10.0.0.100:27017/production_db?authSource=admin"
# Replica set
mongosh "mongodb://node1:27017,node2:27017,node3:27017/mydb?replicaSet=rs0"
# MongoDB Atlas
mongosh "mongodb+srv://username:password@cluster0.abcde.mongodb.net/mydb"
数据库操作
数据库管理:
// List databases
show dbs
// Switch to database
use mydb
// Drop database
db.dropDatabase()
// Database stats
db.stats()
db.runCommand({dbStats: 1, scale: 10241024}) // MB scale
集合操作:
// List collections
show collections
// Create collection
db.createCollection("users")
db.createCollection("logs", {capped: true, size: 10000000, max: 1000})
// Drop collection
db.users.drop()
// Collection stats
db.users.stats()
备份与还原
使用 mongodump/mongorestore:
# Backup entire database
mongodump --host localhost:27017 --db mydb --out /backup/$(date +%Y%m%d)
# Backup with authentication
mongodump --host localhost:27017 --username admin --password --authenticationDatabase admin --db mydb --out /backup/
# Backup specific collection
mongodump --host localhost:27017 --db mydb --collection users --out /backup/
# Compressed backup
mongodump --host localhost:27017 --db mydb --gzip --out /backup/
# Restore database
mongorestore --host localhost:27017 --db mydb /backup/mydb
# Restore with different name
mongorestore --host localhost:27017 --db newdb /backup/mydb
# Restore specific collection
mongorestore --host localhost:27017 --db mydb --collection users /backup/mydb/users.bson
自动备份脚本:
#!/bin/bash # mongodb-backup.sh DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/var/backups/mongodb" DB_NAME="clawd_memory_db"echo "Starting MongoDB backup: $DATE"
# Create backup directory mkdir -p $BACKUP_DIR/$DATE
# Perform backup mongodump --host localhost:27017 --db $DB_NAME --gzip --out $BACKUP_DIR/$DATE
# Check if backup successful if [ $? -eq 0 ]; then echo "✅ Backup completed: $BACKUP_DIR/$DATE" # Create symlink to latest ln -sfn $BACKUP_DIR/$DATE $BACKUP_DIR/latest # Cleanup old backups (keep 7 days) find $BACKUP_DIR -type d -name "2" -mtime +7 -exec rm -rf {} \; else echo "❌ Backup failed!" exit 1 fi
性能分析
查询性能:
// Enable profiling
db.setProfilingLevel(2) // profile all operations
db.setProfilingLevel(1, {slowms: 100}) // profile slow queries only
// View slow queries
db.system.profile.find().limit(5).sort({ts: -1}).pretty()
// Find slow queries
db.system.profile.find({millis: {$gt: 100}}).sort({ts: -1}).pretty()
// Disable profiling
db.setProfilingLevel(0)
服务器状态与指标:
// Server status
db.serverStatus()
// Current operations
db.currentOp()
// Kill long-running operation
db.killOp(opid)
// Database statistics
db.stats()
// Collection statistics
db.users.stats()
连接监控:
// Current connections
db.serverStatus().connections
// Active connections
db.runCommand({connPoolStats: 1})
// List current sessions
db.aggregate([{$listSessions: {}}])
索引管理
创建索引:
// Single field index
db.users.createIndex({email: 1})
// Compound index
db.users.createIndex({email: 1, createdAt: -1})
// Text search index
db.articles.createIndex({title: "text", content: "text"})
// Partial index
db.users.createIndex({email: 1}, {partialFilterExpression: {active: true}})
// TTL index (auto-expire documents)
db.sessions.createIndex({expireAt: 1}, {expireAfterSeconds: 0})
// Background index creation
db.users.createIndex({email: 1}, {background: true})
索引分析:
// List indexes
db.users.getIndexes()
// Index usage statistics
db.users.aggregate([{$indexStats: {}}])
// Explain query execution
db.users.find({email: "test@example.com"}).explain("executionStats")
// Drop index
db.users.dropIndex({email: 1})
db.users.dropIndex("email_1")
用户管理
数据库用户:
// Create admin user
db.createUser({
user: "admin",
pwd: "securepassword",
roles: [{role: "userAdminAnyDatabase", db: "admin"}]
})
// Create database-specific user
db.createUser({
user: "appuser",
pwd: "apppassword",
roles: [
{role: "readWrite", db: "mydb"},
{role: "read", db: "analytics"}
]
})
// Update user
db.updateUser("appuser", {
roles: [{role: "dbOwner", db: "mydb"}]
})
// Change password
db.changeUserPassword("appuser", "newpassword")
// List users
db.getUsers()
// Drop user
db.dropUser("appuser")
自定义角色:
// Create custom role
db.createRole({
role: "dataAnalyst",
privileges: [
{resource: {db: "analytics", collection: ""}, actions: ["find", "listIndexes"]},
{resource: {db: "logs", collection: ""}, actions: ["find"]}
],
roles: []
})
// Grant role to user
db.grantRolesToUser("analyst", ["dataAnalyst"])
副本集管理
初始化副本集:
// Initialize replica set
rs.initiate({
_id: "rs0",
members: [
{_id: 0, host: "mongo1:27017"},
{_id: 1, host: "mongo2:27017"},
{_id: 2, host: "mongo3:27017"}
]
})
副本集操作:
// Check replica set status
rs.status()
// Check configuration
rs.conf()
// Add member
rs.add("mongo4:27017")
// Remove member
rs.remove("mongo4:27017")
// Step down primary
rs.stepDown()
// Force reconfiguration
rs.reconfig(config, {force: true})
数据导入/导出
JSON 导入/导出:
# Export collection to JSON
mongoexport --host localhost:27017 --db mydb --collection users --out users.json
# Export with query
mongoexport --host localhost:27017 --db mydb --collection users --query '{"active": true}' --out active_users.json
# Import JSON
mongoimport --host localhost:27017 --db mydb --collection users --file users.json
# Import CSV
mongoimport --host localhost:27017 --db mydb --collection users --type csv --headerline --file users.csv
维护任务
数据库维护:
// Compact collection
db.users.compact()
// Repair database
db.repairDatabase()
// Validate collection
db.users.validate()
// Re-index collection
db.users.reIndex()
清理操作:
# Clean up orphaned data
mongosh --eval "db.runCommand({cleanupOrphaned: 'mydb.users'})"
# Compact all collections
mongosh mydb --eval "db.runCommand({compact: 'users', force: true})"
监控脚本
健康检查脚本:
#!/bin/bash # mongodb-health.shecho "MongoDB Health Check - $(date)" echo "=================================="
# Check if MongoDB is running if ! pgrep mongod > /dev/null; then echo "❌ MongoDB is not running" exit 1 fi
# Check connection mongosh --eval "db.adminCommand('ping')" > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "✅ MongoDB connection: OK" else echo "❌ MongoDB connection: FAILED" exit 1 fi
# Check disk space DISK_USAGE=$(df -h /var/lib/mongodb | tail -1 | awk '{print $5}' | sed 's/%//') if [ $DISK_USAGE -gt 80 ]; then echo "⚠️ Disk usage: ${DISK_USAGE}% (High)" else echo "✅ Disk usage: ${DISK_USAGE}%" fi
# Check memory usage MEMORY_USAGE=$(mongosh --quiet --eval "JSON.stringify(db.serverStatus().mem)" | jq '.resident') echo "📊 Memory usage: ${MEMORY_USAGE}MB"
# Check active connections CONNECTIONS=$(mongosh --quiet --eval "db.serverStatus().connections.current") echo "🔌 Active connections: $CONNECTIONS"
echo "Health check completed."
此技能为开发与生产环境提供全面的 MongoDB 管理能力。