• 周日. 6月 26th, 2022

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

MongoDB数据库备份操作

admin

11月 28, 2021

Linux服务器MongoDB数据库备份

登录服务器

  • 使用SSH工具登录服务器
       ssh [email protected]你服务器的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日并且是全数据库备份,若是需要自定义备份部分数据库,可自己参照上述脚本中的注释写相应的脚本.

发表评论

您的电子邮箱地址不会被公开。