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/
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日并且是全数据库备份,若是需要自定义备份部分数据库,可自己参照上述脚本中的注释写相应的脚本.

posted @ 2021-07-24 21:45  Joe_du  阅读(712)  评论(0编辑  收藏  举报