Linux 自动定时备份 MongoDB

 

本文介绍在 Linux 系统下,使用 mongodump 命令自动定时备份数据库的方法。

mongodump

mongodump 是 MongoDB 提供的一个工具,用于备份数据库,配合使用 mongorestore 恢复工具使用。这套工具适合小型应用或开发环境。

运行 mongodump 和 mongorestore 时需要读取正在运行的数据库实例,因此会影响数据库性能。一方面是运行时需要占用系统资源,另一方面,运行这两个命令时数据库会强制通过内存读取所有数据,可能导致读取的不常用数据覆盖常用数据,从而影响数据库日常运行的性能。

2.2及以上版本的 mongodump 数据格式与低版本不兼容,因此请勿使用高版本工具备份低版本数据。

mongodump 不会备份 local 数据库。

直接运行 mongodump 命令,默认备份本地运行在27017端口下的 MongoDB 实例中的所有数据库(local除外),并在当前目录下生成 dump/ 路径存放备份文件。

你也可以使用以下命令指定备份的数据库位置、端口、输出文件位置、备份数据库和文档:

mongodump --host mongodb.example.net --port 27017 --out /data/backup/ --db test --collection myCollection

命令脚本

首先我们要创建一个执行备份工作的脚本。在 ~/crontab/ 下新建一个 .sh 文件:

mkdir -p ~/crontabvi ~/crontab/mongod_bak.sh

写入以下内容:

#!/bin/shDUMP=mongodumpOUT_DIR=/data/backup/mongod/tmp   // 备份文件临时目录TAR_DIR=/data/backup/mongod       // 备份文件正式目录DATE=`date +%Y_%m_%d_%H_%M_%S`    // 备份文件将以备份时间保存DB_USER=<USER>                    // 数据库操作员DB_PASS=<PASSWORD>                // 数据库操作员密码DAYS=14                           // 保留最新14天的备份TAR_BAK="mongod_bak_$DATE.tar.gz" // 备份文件命名格式cd $OUT_DIR                       // 创建文件夹rm -rf $OUT_DIR/*                 // 清空临时目录mkdir -p $OUT_DIR/$DATE           // 创建本次备份文件夹$DUMP -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE  // 执行备份命令tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE       // 将备份文件打包放入正式目录find $TAR_DIR/ -mtime +$DAYS -delete             // 删除14天前的旧备份

这个脚本完成了备份、打包、删除一定时间之前旧备份的工作。注意其中的 user 需要具有对希望备份的数据库具有 find 操作权限。

保存好脚本后别忘了将它设为可执行:

chmod +x ~/crontab/mongod_bak.sh

现在你可以试着执行一下 ./mongod_bak.sh,就会在备份文件夹中看到打包好的备份数据了。

自动运行

备份脚本写好之后,就需要让它自动运行。直接使用 Linux 的 crontab 命令即可:

vi /etc/crontab

在底部添加:

0 2 * * * root ~/crontab/mongod_bak.sh

这一行表示在每天凌晨02:00以 root 身份运行备份数据库的脚本。然后重启 crond 使其生效:

/bin/systemctl restart  crond.servicechkconfig crond on    // 设为开机启动

至此,一个自动运行的备份脚本就设置好了。以后每天凌晨02:00都会有一份新鲜的备份文件放在指定目录中,并且会自动删除14天前的旧备份。

恢复备份

mongodump 和 mongorestore 是一对命令,分别用于备份和恢复数据。

mongorestore 命令默认将 /dump 文件夹(同时也是 mongodump 的默认备份文件夹)下的所有数据恢复到相应的数据库中,也接受很多选项控制备份操作。

我们最常用一个的操作需求是:

将指定的备份文件恢复到指定数据库的指定文档

其对应的命令是

mongorestore -d <DATABASE> -c <COLLECTION> <PATH>

PATH 就是要恢复的数据文件夹或文件,用于恢复整个数据库或指定恢复一个列的数据。