Linux服务器MongoDB数据库备份
登录服务器
- 使用SSH工具登录服务器
ssh root@你服务器的ip地址 -p 你服务器ssh服务的端口
- 输入密码登录成功
下载MongoDB Tools
- 首先去官方网站下载自己服务器对应的工具版本,个人推荐使用tgz的包进行安装.
如:wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-ubuntu2004-x86_64-100.4.1.tgz
- 解压压缩文件并将文件复制到对应目录
tar -zxvf mongodb-*-tools-*-100.4.1.tgz sudo cp <mongodb-database-tools-directory>/bin/* /usr/local/bin/
- 将下载好的文件放置到Mongodb相同的目录(/usr/local/bin/)推荐查看我之前的Mongodb安装教程
- 赋予执行权限
chmod 777 /usr/local/bin/mongodump
数据库备份脚本
- 在Windows或者Linux上写入如下脚本.sh
#!/bin/bash
# Program:
# type title here
# History:
# 2021-07-24 dy first release
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin
export PATH
# DUMP=/usr/local/bin/mongodump #mongodump备份文件执行路径
#由于mongodb官方的文件往往会放在上述path路径中,所以这里可以不指定
OUT_DIR=/root/backup/mongo_bak_now #临时备份目录
TAR_DIR=/root/backup/mongo_bak_list #备份存放路径
DATE=`date +%Y_%m_%d` #获取当前系统时间
DB_USER=dbusername #数据库账号
DB_PASS=123456 #数据库密码
AUTH_DB=admin #认证数据库
DB_IP=192.168.0.12 #数据库链接IP
DAYS=5 #保留最近N天的备份
TAR_BAK="mongo_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
mkdir -p /root/backup/mongo_bak_now #确保临时备份目录存在
mkdir -p /root/backup/mongo_bak_list #确保备份存放目录存在
cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE
#备份全部数据库
mongodump -h $DB_IP -u $DB_USER -p $DB_PASS --authenticationDatabase $AUTH_DB -o $OUT_DIR/$DATE
# 如下命令只备份 website这一个库,若是只备份部分数据库可以按照这个命令逐一添加
# mongodump -h $DB_IP -u $DB_USER -p $DB_PASS --authenticationDatabase $AUTH_DB -d website -o $OUT_DIR/$DATE
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE #压缩为.tar.gz格式
find $TAR_DIR/ -mtime +$DAYS -delete #删除N天前的备份文件
rm -rf $OUT_DIR/* #删除临时文件只保留压缩包,进一步节约磁盘空间
- 将上述文件保存为sh文件,本例命名为mongobak.sh
- 生成上述sh文件后,放入到/root/bin目录下
- 赋予执行权限
chmod 777 /root/bin/mongobak.sh
调整文件格式
- 在Windows下编辑的上述脚本可能会存在问题,造成如下错误
/bin/bash^M: 坏的解释器: 没有那个文件或目录
这个问题主要是由于Linux和Windows之间的换行符差异造成.可使用 sed -i 's/ $//' filename 命令解决
sed -i 's/
$//' /root/bin/mongobak.sh
- 执行成功后,可以先直接使用mongobak.sh命令测试看下是否能够成功备份.若是无错误可以进行如下配置实现每天定点执行备份.
使用crontab执行每日定时备份
- 若是系统中没有crontab,需要自行先安装根据各系统的差异执行相应命令
- 修改crontab的配置
crontab -e
- 插入如下语句
- 0 2 * * * /root/bin/mongobak.sh
- 该语句表示每天早上2点整执行脚本备份数据库,若是想自定义其他时间,请自己查询crontab命令
- 将上述添加好后,添加crontab开机自启动,可执行ntsysv命令选择crond.service并保存
自此所有配置就已经完成.等待每日自动备份即可.本教程中的脚本备份文件只会保留5日并且是全数据库备份,若是需要自定义备份部分数据库,可自己参照上述脚本中的注释写相应的脚本.