Linux下怎么通过Shell脚本自动备份MongoDB

发布时间:2022-02-17 15:48:00 作者:iii
来源:亿速云 阅读:214
# Linux下怎么通过Shell脚本自动备份MongoDB

## 前言

在数据驱动的时代,数据库备份是系统运维中不可或缺的重要环节。MongoDB作为流行的NoSQL数据库,其数据备份尤为重要。本文将详细介绍如何在Linux环境下通过Shell脚本实现MongoDB的自动化备份,涵盖单机部署和副本集环境的备份方案,并讨论备份策略优化和常见问题处理。

## 一、准备工作

### 1.1 环境要求
- Linux服务器(本文以Ubuntu 20.04为例)
- 已安装MongoDB(3.6+版本)
- 基本的Shell脚本编写能力
- `mongodump`工具(通常随MongoDB安装包自带)

### 1.2 工具安装确认
```bash
# 检查mongodump是否可用
which mongodump

# 查看版本
mongodump --version

二、基础备份脚本实现

2.1 最简单的备份脚本

创建mongobackup.sh文件:

#!/bin/bash

# 基础变量定义
BACKUP_DIR="/data/backup/mongodb"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="mydatabase"
USERNAME="admin"
PASSWORD="yourpassword"

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

# 执行备份
mongodump --host 127.0.0.1 --port 27017 \
          -u $USERNAME -p $PASSWORD \
          --authenticationDatabase admin \
          --db $DB_NAME \
          --out $BACKUP_DIR/$DATE

# 检查执行结果
if [ $? -eq 0 ]; then
    echo "$(date) - MongoDB备份成功" >> $BACKUP_DIR/backup.log
else
    echo "$(date) - MongoDB备份失败" >> $BACKUP_DIR/backup.log
    exit 1
fi

2.2 脚本增强版

添加压缩和保留期限功能:

#!/bin/bash

# 增强版配置
BACKUP_ROOT="/data/backup/mongodb"
MAX_DAYS=7  # 保留最近7天备份
COMPRESS=true

# 获取当前时间
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"

# 创建目录
mkdir -p $BACKUP_DIR

# 备份所有数据库
mongodump --host 127.0.0.1 --port 27017 \
          -u $USERNAME -p $PASSWORD \
          --authenticationDatabase admin \
          --out $BACKUP_DIR

# 压缩备份
if [ "$COMPRESS" = true ]; then
    tar -zcvf $BACKUP_DIR.tar.gz $BACKUP_DIR
    rm -rf $BACKUP_DIR
fi

# 清理旧备份
find $BACKUP_ROOT -name "*.tar.gz" -type f -mtime +$MAX_DAYS -delete

# 日志记录
echo "$(date) - 备份完成,保存位置: $BACKUP_DIR.tar.gz" >> $BACKUP_ROOT/backup.log

三、高级备份方案

3.1 副本集环境备份

对于MongoDB副本集,建议从secondary节点备份:

#!/bin/bash

# 副本集配置
REPLICA_SET="myreplica"
SECONDARY_NODE="mongo2.example.com"
OPLOG=true  # 是否包含oplog

mongodump --host $SECONDARY_NODE \
          --oplog=$OPLOG \
          --readPreference=secondary \
          --out $BACKUP_DIR

3.2 分片集群备份

分片集群需要备份所有分片和配置服务器:

#!/bin/bash

# 分片集群备份
SHARDS=("shard1.example.com" "shard2.example.com")
CONFIG_SERVERS=("cfg1.example.com" "cfg2.example.com")

# 备份每个分片
for shard in "${SHARDS[@]}"; do
    mongodump --host $shard --out $BACKUP_DIR/shards/$shard
done

# 备份配置服务器
mongodump --host ${CONFIG_SERVERS[0]} \
          --out $BACKUP_DIR/configsvr

四、自动化部署

4.1 使用cron定时任务

设置每日凌晨2点执行备份:

# 编辑crontab
crontab -e

# 添加以下内容
0 2 * * * /bin/bash /path/to/mongobackup.sh

4.2 系统服务方式

创建systemd服务更可靠:

  1. 创建服务文件/etc/systemd/system/mongobackup.service:
[Unit]
Description=MongoDB Backup Service
After=network.target

[Service]
Type=oneshot
User=mongodb
ExecStart=/bin/bash /path/to/mongobackup.sh
  1. 创建定时器/etc/systemd/system/mongobackup.timer:
[Unit]
Description=Run MongoDB backup daily

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
  1. 启用服务:
systemctl enable mongobackup.timer
systemctl start mongobackup.timer

五、备份恢复测试

5.1 数据恢复命令

# 单库恢复
mongorestore --host 127.0.0.1 --port 27017 \
             -u $USERNAME -p $PASSWORD \
             --authenticationDatabase admin \
             --db $DB_NAME \
             $BACKUP_DIR/$DB_NAME

# 全量恢复
mongorestore --host 127.0.0.1 --port 27017 \
             -u $USERNAME -p $PASSWORD \
             --authenticationDatabase admin \
             --drop \
             $BACKUP_DIR

5.2 恢复测试脚本

建议定期执行恢复测试:

#!/bin/bash

TEST_DB="backup_test"
TEST_DIR="/tmp/mongorestore_test"

# 复制备份文件到测试目录
cp -r $BACKUP_DIR $TEST_DIR

# 执行恢复
mongorestore --host 127.0.0.1 --port 27017 \
             -u $USERNAME -p $PASSWORD \
             --authenticationDatabase admin \
             --db $TEST_DB \
             $TEST_DIR/$DB_NAME

# 验证数据
mongo --host 127.0.0.1 --port 27017 \
      -u $USERNAME -p $PASSWORD \
      --authenticationDatabase admin \
      $TEST_DB \
      --eval "printjson(db.stats())"

六、安全注意事项

  1. 备份文件权限

    chown -R mongodb:mongodb $BACKUP_ROOT
    chmod -R 700 $BACKUP_ROOT
    
  2. 密码安全

    • 使用配置文件存储密码
    • 设置配置文件权限为600
    • 考虑使用Vault等密钥管理工具
  3. 网络传输加密

    mongodump --ssl --host dbserver.example.com
    

七、常见问题解决

7.1 认证失败

错误信息:

Failed: error connecting to db server: server returned error on SASL authentication step: Authentication failed.

解决方案: - 确认用户名/密码正确 - 检查authenticationDatabase参数 - 验证用户角色是否有备份权限

7.2 磁盘空间不足

预防措施: - 备份前检查磁盘空间 - 添加监控告警 - 定期清理旧备份

7.3 备份性能优化

八、备份策略建议

  1. 3-2-1备份原则

    • 至少保留3份备份
    • 使用2种不同存储介质
    • 1份异地备份
  2. 多级备份

    • 每日增量备份
    • 每周全量备份
    • 每月归档备份
  3. 云存储集成

    # 上传到AWS S3示例
    aws s3 cp $BACKUP_DIR.tar.gz s3://mybackupbucket/mongodb/
    

结语

通过本文介绍的方法,您可以构建一个健壮的MongoDB自动备份系统。关键是要定期测试恢复流程,确保备份的有效性。随着业务增长,可能需要考虑更专业的备份工具如Percona Backup for MongoDB,但对于大多数场景,本文提供的Shell脚本方案已经足够。

最后更新:2023年11月 作者:数据库运维专家 版权声明:本文采用CC BY-NC-SA 4.0协议 “`

这篇文章共计约2150字,采用Markdown格式编写,包含代码块、章节标题和结构化内容,适合技术文档发布。如需调整内容长度或细节,可以进一步修改。

推荐阅读:
  1. linux下安装mongodb
  2. linux下按在mongodb

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux shell mongodb

上一篇:Shell怎么获取当前日期和时间及磁盘使情况

下一篇:Bash变量类型有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》