Linux 自动定时备份 MongoDB
本文介绍在 Linux 系统下,使用 mongodump
命令自动定时备份数据库的方法。
mongodump
mongodump
是 MongoDB 提供的一个工具,用于备份数据库,配合使用 mongorestore
恢复工具使用。这套工具适合小型应用或开发环境。
运行 mongodump
和 mongorestore
时需要读取正在运行的数据库实例,因此会影响数据库性能。一方面是运行时需要占用系统资源,另一方面,运行这两个命令时数据库会强制通过内存读取所有数据,可能导致读取的不常用数据覆盖常用数据,从而影响数据库日常运行的性能。
2.2及以上版本的 mongodump
数据格式与低版本不兼容,因此请勿使用高版本工具备份低版本数据。
mongodump
不会备份 local
数据库。
直接运行 mongodump
命令,默认备份本地运行在27017端口下的 MongoDB 实例中的所有数据库(local
除外),并在当前目录下生成 dump/
路径存放备份文件。
你也可以使用以下命令指定备份的数据库位置、端口、输出文件位置、备份数据库和文档:
1 | mongodump --host mongodb.example.net --port 27017 --out /data/backup/ --db test --collection myCollection |
命令脚本
首先我们要创建一个执行备份工作的脚本。在 ~/crontab/
下新建一个 .sh
文件:
1 | mkdir -p ~/crontab |
写入以下内容:
1 |
|
这个脚本完成了备份、打包、删除一定时间之前旧备份的工作。注意其中的 user
需要具有对希望备份的数据库具有 find
操作权限。
保存好脚本后别忘了将它设为可执行:
1 | chmod +x ~/crontab/mongod_bak.sh |
现在你可以试着执行一下 ./mongod_bak.sh
,就会在备份文件夹中看到打包好的备份数据了。
自动运行
备份脚本写好之后,就需要让它自动运行。直接使用 Linux 的 crontab
命令即可:
1 | crontab -e |
在打开的文件中写入:
1 | 0 2 * * * root ~/crontab/mongod_bak.sh |
这一行表示在每天凌晨02:00以 root 身份运行备份数据库的脚本。然后重启 crond 使其生效:
1 | /bin/systemctl restart crond.service |
至此,一个自动运行的备份脚本就设置好了。以后每天凌晨02:00都会有一份新鲜的备份文件放在指定目录中,并且会自动删除14天前的旧备份。