zoukankan      html  css  js  c++  java
  • 定时脚本备份mongo数据库

    //部分有借鉴,如有侵权,请通知,立即删除

    shell脚本执行定时备份mongo数据库:

    1、简单例子:

    新建文件:

    vim hello.sh

    编辑此文件:

    #!/bin/bash
    echo "hello world"

    给文件赋予权限:

    chomd 755 hello.sh

    执行文件:


    ./hello.sh

    2、定时任务

    linux安装crontab:


    yum install vixie-cron
    yum install crontab
    //vixie-cron软件包是cron的主程序
    //crontabs软件包用来安装,卸载或列举用来驱动cron守护进程的表格的程序

    启动crontab服务:


    service crond start//启动服务
    service crond stop //关闭服务
    service crond restart//重启服务
    service crond reload //重新载入配置
    service crond status //查看crontab服务状态

    设置需要执行的脚本:

    新增调度任务可用两种方法:

    1、在命令行输入:crontab -e 然后添加相应的任务,wq存盘退出;

    2、直接编辑/etc/crontab文件,即vi/etc/crontab,添加相应的任务

    两种方法的区别:第一种是针对某个用户的;第二种是针对系统的任务。

    查看调度任务:


    crontab -l //列出当前的所有调度任务
    crontab -l -u jp //列出用户jp的所有调度任务
    删除任务调度工作
    crontab -r //删除所有任务调度工作

    编辑/etc/crontab的文件内容如下:

    前四行是cron任务运行的环境变量:

    SHELL变量的值指定系统使用的SHELL环境(该样例为bash shell),
    PATH变量定义了执行命令的路径。Cron的输出以电子邮件的形式发给MAILTO变量定义的用户名。
    如果MAILTO变量定义为空字符串(MAILTO=""),电子邮件不会被发送。
    执行命令或脚本时HOME变量可用来设置基目录。

    文件/etc/crontab中每行任务的描述格式如下:

    minute hour day month dayofweek command
    minute - 从0到59的整数
    hour - 从0到23的整数
    day - 从1到31的整数 (必须是指定月份的有效日期)
    month - 从1到12的整数 (或如Jan或Feb简写的月份)
    dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
    command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)
    root表示以root用户身份来运行
    run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本
    对于以上各语句,星号(*)表示所有可用的值。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令。
    整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4
    指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。

    符号“/”指定步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。

    以“#”开头的为注释行,不会被执行。
    比如上述图中 执行的是每隔一分钟执行一半hello.sh脚本 上边脚本输出的内容 大家也知道   >> 符号 指定文件获取内容的存放位置

    3、真正执行:

    编写脚本:


    #!/bin/bash
    # dump命令路径
    DUMP=/root/mongo/mongodb-linux-x86_64-rhel62-4.2.3/bin/mongodump
    # 备份路径
    OUT_DIR=/root/mongo/backupMG
    # 当前系统时间
    DATE=`date +%Y_%m_%d`
    echo $DATE
    #数据库名称
    DB_NAME=data
    sudo mkdir -p $OUT_DIR/$DATE
    $DUMP -h 127.0.0.1:27017 -d $DB_NAME -o $OUT_DIR/$DATE
    exit

    添加权限:

    chmod -X mongodb.sh(chmod +x mongodb.sh)

    添加定时任务:


    [root@csmserver mongo]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root

    # For details see man 4 crontabs

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    0 10 * * * root /root/mongo/backupMongo.sh

    0 10 * * * root /root/mongo/backupMongo.sh//每天十点执行定时任务

    mongo的备份以及导入功能:

    1、导出工具:mongoexport

    mongoexport -h host -u username -p password -d dbname -c Collection -o /filePath.filename -type json/csv -f "field"
    -h :要导出的数据库主机地址
    -u :数据库用户名,没有可以不写
    -p :数据库密码,没有可以不写
    -d : 导出的数据库名
    -c :导出的集合collection名
    -o :导出到的文件路径文件名
    -type :导出的类型:json 或者csv 如果是CSV格式,需要指定-f字段参数
    -f :字段参数,要导出集合的字段名,也就是要导出那些列
    -q :指出导出数据的过滤条件

    2、导入工具:mongoimport

    mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field --upsert

    -d :数据库名
    -c :collection名
    --type :导入的格式默认json
    -f :导入的字段名
    --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
    --file :要导入的文件
    --upsert : 新增或者更新的方式导入数据库

    3、备份工具

    mongodump -h dbhost -d dbname -o dbdirectory
    -h: MongDB所在服务器地址,
    -d: 需要备份的数据库实例,
    -o: 备份的数据存放位置,

    4、数据库恢复

     mongorestore -h dbhost -d dbname --dir dbdirectory
    -h: MongoDB所在服务器地址
    -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
    --dir: 备份数据所在位置,例如:/home/mongodump/itcast/
    --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。
  • 相关阅读:
    java enum类
    mvn filter autoconfig 产生自动配置
    Spring与Quartz的整合实现定时任务调度 以及crontab的用法
    网络广告术语CPC、CPM和CTR的含义和关系
    spring mvc3的注解@ResponseBody 自动返回jason
    Google Guava14.0 瓜娃学习笔记
    java中的各个数据结构区别
    org.apache.http.client.HttpClient; HttpClient 4.3超时设置
    maven test 运行 指定类或方法 打包 mvn clean assembly:assembly
    为什么要做url encode
  • 原文地址:https://www.cnblogs.com/notchangeworld/p/12533939.html
Copyright © 2011-2022 走看看