定时脚本备份mongo数据库
1、简单例子:
新建文件:
vim hello.sh
编辑此文件:
给文件赋予权限:
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: 备份的数据存放位置,
mongo具有用户名和密码
mongodump -h localhost -d article -o dbdirectory -u=root -p=123456 --authenticationDatabase admin
-h 地址
-d 数据库名称
-u 用户名
-p 密码
-o 输出地址
--authenticationDatabase admin 验证账户的数据库
4、数据库恢复
mongorestore -h dbhost -d dbname --dir dbdirectory
-h: MongoDB所在服务器地址 -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2 --dir: 备份数据所在位置,例如:/home/mongodump/itcast/ --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。
我不是来改变世界的