MongoDB数据库备份操作
Linux服务器MongoDB数据库备份
登录服务器
- 使用SSH工具登录服务器
ssh username@你服务器的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-*.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:
# MongoDB Backup bash
# History:
# 2022-02-12 by Joe
# Author: Joe
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin
export PATH
BACKDIR=/home/joe/1thdd
# DUMP=/usr/local/bin/mongodump #mongodump备份文件执行路径
OUT_DIR=$BACKDIR/mongod_bak_now #临时备份目录
TAR_DIR=$BACKDIR/mongod_bak_list #备份存放路径
DATE=`date +%Y_%m_%d_%H_%M_%S` #获取当前系统时间
DB_USER=dbuser #数据库账号
DB_PASS='dbpasswd' #数据库密码
AUTH_DB=admin #认证数据库
DB_IP=127.0.0.1 #数据库链接IP
DB_PORT=27017 #数据库链接端口
DAYS=3 #保留最近N+1天的备份
TAR_BAK="alt_mongod_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
mkdir -p $BACKDIR/mongod_bak_now
mkdir -p $BACKDIR/mongod_bak_list
cd $OUT_DIR
rm -rf $OUT_DIR/*
mkdir -p $OUT_DIR/$DATE
mongodump --host $DB_IP --port $DB_PORT -u $DB_USER -p $DB_PASS --authenticationDatabase $AUTH_DB -o $OUT_DIR/$DATE
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE #压缩为.tar.gz格式
find $TAR_DIR/ -mtime +$DAYS -delete #删备份文件
rm -rf $OUT_DIR/* #删除临时文件只保留压缩包,进一步节约磁盘空间
- 将上述文件保存为sh文件,本例命名为mongobak.sh
- 生成上述sh文件后,放入到/root/bin目录下
- 赋予执行权限
sudo chmod 755 /home/joe/bin/mongobak.sh
调整文件格式
- 在Windows下编辑的上述脚本可能会存在问题,造成如下错误
/bin/bash^M: 坏的解释器: 没有那个文件或目录
这个问题主要是由于Linux和Windows之间的换行符差异造成.可使用 sed -i 's/\r$//' filename 命令解决
sed -i 's/\r$//' /home/joe/bin/mongobak.sh
- 执行成功后,可以先直接使用mongobak.sh命令测试看下是否能够成功备份.若是无错误可以进行如下配置实现每天定点执行备份.
使用crontab执行每日定时备份
- 若是系统中没有crontab,需要自行先安装根据各系统的差异执行相应命令
- 修改crontab的配置
crontab -e
- 插入如下语句
- 0 2 * * * /home/joe/bin/mongobak.sh
- 该语句表示每天早上2点整执行脚本备份数据库,若是想自定义其他时间,请自己查询crontab命令
- 将上述添加好后,添加crontab开机自启动,可执行ntsysv命令选择crond.service并保存
至此所有配置就已经完成.等待每日自动备份即可.本教程中的脚本备份文件只会保留5日并且是全数据库备份,若是需要自定义备份部分数据库,可自己参照上述脚本中的注释写相应的脚本.