Ubuntu中如何对MongoDB进行定期维护
导读:Ubuntu 下 MongoDB 定期维护清单 一 日常与每周巡检 服务与连通性 检查服务状态:sudo systemctl status mongod 查看实时日志:journalctl -u mongod -f 简单连通与健康:mo...
Ubuntu 下 MongoDB 定期维护清单
一 日常与每周巡检
- 服务与连通性
- 检查服务状态:sudo systemctl status mongod
- 查看实时日志:journalctl -u mongod -f
- 简单连通与健康:mongostat --port 27017 -u admin -p ‘password’ --authenticationDatabase admin(关注 insert/qr/qw 等队列与吞吐)
- 慢查询与索引
- 开启/调整慢查询:db.setProfilingLevel(1, { slowms: 100 } )
- 查看慢查询:db.system.profile.find({ millis: { $gt: 100 } } ).sort({ ts: -1 } ).limit(5)
- 配置与容量基线
- 核对关键配置:storage.dbPath、storage.engine、systemLog.path、net.bindIp、security.authorization
- 结合监控观察 WiredTiger 缓存命中、页面错误、连接数、磁盘与 IOPS 使用率,形成周报基线。
二 备份策略与自动化
- 备份方式选型
- 逻辑备份:mongodump(灵活、适合中小规模与跨版本迁移)
- 物理/快照:LVM/云盘快照(大库快速一致性备份)
- 企业级:第三方工具(如 Percona Backup for MongoDB、Atlas Backup)
- 全量备份脚本示例(按日轮转,保留 N 天)
- 建议将脚本与备份目录归属 mongodb:mongodb,并在 root 的 crontab 中定时执行
- 示例(保留最近 15 天,路径可按需调整):
#!/usr/bin/env bash set -Eeuo pipefail DUMP=/usr/bin/mongodump OUT_DIR=/data/mongodb/bak/mongodb_now TAR_DIR=/data/mongodb/bak/mongodb_list DATE=$(date +%Y_%m_%d) DAYS=15 TAR_BAK="mongodb_bak_${ DATE} .tar.gz" mkdir -p "$OUT_DIR/$DATE" "$TAR_DIR" "$DUMP" -h 127.0.0.1:27017 -o "$OUT_DIR/$DATE" tar -zcvf "$TAR_DIR/$TAR_BAK" -C "$OUT_DIR" "$DATE" rm -rf "$OUT_DIR/$DATE" # 清理旧备份 find "$TAR_DIR" -name "mongodb_bak_*.tar.gz" -mtime +$DAYS -delete - 定时任务(root):每天 02:10 执行
10 2 * * * /usr/local/bin/mongodb_backup.sh > > /var/log/mongodb/backup.log 2> & 1
- 恢复命令
- 全量恢复:mongorestore /path/to/backup
- 指定库/集合:mongorestore --db mydb /path/to/backup/mydb
- 建议
- 关键业务采用“每日全量 + 持续归档 oplog”以实现时间点恢复(需副本集/分片集群)
- 定期将备份文件拷贝到异地/对象存储,并进行恢复演练验证可用性。
三 日志轮转与系统日志清理
- MongoDB 日志轮转(推荐)
- 利用 SIGUSR1 触发日志轮转,配合 find 清理 N 天前旧日志
- 示例脚本(每天 23:59 轮转并保留 7 天):
#!/usr/bin/env bash set -Eeuo pipefail PID=$(pidof /usr/bin/mongod || true) LOG_DIR=/var/log/mongodb DAYS=7 if [[ -n "$PID" ]]; then kill -SIGUSR1 "$PID" fi find "$LOG_DIR" -name "mongod.log.*" -mtime +$DAYS -delete - 定时任务(root):
59 23 * * * /usr/local/bin/mongo_log_rotate.sh > > /var/log/mongodb/rotate.log 2> & 1
- systemd 日志轮转(可选)
- 限制 MongoDB 单元日志体积:sudo journalctl --vacuum-size=100M
- 配合 /etc/systemd/journald.conf 的 SystemMaxUse/MaxRetentionSec 做全局策略。
四 安全与版本更新
- 安全加固
- 启用认证:security.authorization: enabled,为管理/应用创建最小权限角色
- 网络最小化:net.bindIp 绑定内网地址,限制公网暴露
- 定期审计用户、角色与白名单;备份文件加密存储与传输
- 补丁与版本升级
- 流程要点:备份 → 验证备份 → 升级包 → 重启验证
- Ubuntu APT 升级示例(以 6.0 仓库为例,其他版本替换版本号):
# 导入公钥 wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - # 添加源(Ubuntu 20.04 Focal 示例) echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" \ | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list # 升级 sudo apt-get update sudo apt-get install -y mongodb-org sudo systemctl restart mongod mongod --version - 升级后核对:版本号、配置兼容性、复制集/分片状态、应用连接。
五 可用性与容量维护
- 监控与自愈
- 运行健康检查脚本,异常时自动重启并记录告警
#!/usr/bin/env bash if systemctl is-active --quiet mongod; then echo "MongoDB is running." else echo "MongoDB is down. Restarting..." systemctl restart mongod # 可扩展:发送告警到企业微信/钉钉/邮件 fi - 定时任务(root):每 5 分钟检查一次
*/5 * * * * /usr/local/bin/monitor_mongod.sh > > /var/log/mongodb/monitor.log 2> & 1
- 运行健康检查脚本,异常时自动重启并记录告警
- 容量与性能
- 结合 mongostat 观察队列与扫描,按需创建/优化索引、调整 WiredTiger cacheSizeGB
- 规划磁盘扩容与数据归档策略,避免单盘/单表膨胀导致性能劣化。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu中如何对MongoDB进行定期维护
本文地址: https://pptw.com/jishu/786514.html
