shell定时备份数据库


Shell脚本

1. 实现定时备份数据库

需求:
1> 定时备份数据库
2> 删除10天前的备份的数据
3> 将备份的数据库拷贝到另一台机器上,只保存近10天的数据

备份数据库
#!/bin/bash
# backup mindoc db 
# backup path
BACKUP_PATH=/xxx/backup_sql
# backup db name
DATETIME=$(date +%Y_%m_%d_%H%M%S)
DB_NAME="mindoc_db_$DATETIME.sql"
echo ${DB_NAME}
#USER
DB_USER=user
#PASSWORD
DB_PWD=password
#Determine and create path
[ ! -d  "$BACKUP_PATH" ] && mkdir -p $BACKUP_PATH
#backup mindoc db
SPL_PATH=/usr/local/mysql/bin/
DATABASE=mindoc_db
$SPL_PATH/mysqldump -u${DB_USER} -p${DB_PWD} $DATABASE -R > $BACKUP_PATH/$DB_NAME 2>/dev/null
删除10天前的数据
#delete backup file 10 days ago
find $BACKUP_PATH -mtime +10 -name "mindoc_db_*.sql" -exec rm -rf {} \;
远程cp到另一台机器上,并保存10天内的数据
/usr/bin/expect <<EOF
#scp .sql to 10.150.11.11
spawn scp $BACKUP_PATH/$DB_NAME user@10.150.11.11:/home/user/mindoc_DB/
expect "password:"#这个地方要注意下交互界面上的单词
send "password\r"
expect {
*#* {}#意思是交互界面有#的时候退出,root是#
eof  {exit 47;}
}
spawn ssh qa@10.150.11.11:
expect "password:"
send "qa\r"

expect {
*$* {}#意思是交互界面有#的时候退出,普通用户是$
eof  {exit 47;}
}
#保留10天内数据
find /home/user/mindoc_DB/ -mtime +10 -name "mindoc_db_*.sql" -exec rm -rf {} \;

expect {
*$* {}
eof  {exit 47;}
}
EOF

定时备份,使用crontab定时执行脚本
每天凌晨110分执行脚本
# crontab -e
10 1 * * * /home/qa/QA-Tool/mindoc/mindoc_db_backup.sh

2.cron和crontab命令

- cron机制

cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制

- 参数说明

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
-u:这个参数可以让我们去编辑其他人的crontab,如果没有加上这个参数的话就会开启自己的crontab crontab -u 使用者名称
-l:可以列出crontab的内容

- 格式说明

f1 f2 f3 f4 f5 program
f1 是表示分钟
f2 表示小时
f3 表示一个月份中的第几日
f4 表示月份
f5 表示一个星期中的第几天
program 表示要执行的程序
当 f1 为 * 时表示每分钟都要执行 program
f2 为 * 时表示每小时都要执行程序

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行
f2 为 a-b 时表示从第 a 到第 b 小时都要执行

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次
f2 为 */n 表示每 n 小时个时间间隔执行一次

当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行
f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行

f3和f5(日期和星期)是逻辑或的关系
例:

2 3 4,20 * 5 的意思是每月的4号和20号,以及每周五的3点2分执行

\ * * * * *
- - - - -
| | | | |
| | | | ±---- 星期中星期几 (0 - 6) (星期天 为0)
| | | ±--------- 月份 (1 - 12)
| | ±-------------- 一个月中的第几天 (1 - 31)
| ±------------------- 小时 (0 - 23)
±------------------------ 分钟 (0 - 59)

- 实例

每一分钟执行一次 /home/demo/run.sh:

* * * * * /home/demo/run.sh

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /home/demo/run.sh:

0 6-12/3 * 12 * /home/demo/run.sh

0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache

50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务

50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务

0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘

1 * * * * /home/demo/run.sh 每小时的第一分执行 /home/demo/run.sh这个文件

00 03 * * 1-5 find /home ".xxx" -mtime +4 -exec rm {} ; 每周一至周五3点钟,在目录/home中,查找文件名为.xxx的文件,并删除4天前的文件。

30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令

- crontab时间格式范例

1-3表示123
1-9/2表示13579

- crontab服务命令

service crontab start//启动服务
service crontab stop//停止服务
service crontab status//查看服务状态
service crontab reload//重新加载服务配置
service crontab restart//重新启动服务
chkconfig crontab on//开机自启crontab 服务
chkconfig crontab off//关闭开机自启crontab服务

- crontab定时任务执行不成功原因

crond服务未启动
权限问题
路径问题 使用绝对路径
时差问题 使用运行server的时区

3.>/dev/null在shell中的作用

2>表示标准错误
>代表重定向到哪里
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
2>/dev/null的意思就是把标准错误输入到空设备文件,将标准输入删掉
1>/dev/null意思讲标准输出到黑洞中,就是不输出任何信息,等同于/dev/null
1>/dev/null 2>&1 是先把标准输出到黑洞中,再把标准错误输出到和黑洞中,即不显示任何错误信息(2的输入重定向等同与1)

4. find 命令

命令:find 对应目录 -mtime +天数 -name “文件名” -exec rm -rf {} \;

将/usr/local/backups目录下所有10天前带"."的文件删除

find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;
find /usr/local/backups -mtime +10 -name "*.*" |xargs rm -rf 

find:linux的查找命令,用户查找指定条件的文件
-mtime:标准语句写法
+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
-exec:固定写法
rm -rf:强制删除文件,包括目录
{} ; :固定写法,一对大括号+空格+\

find 默认在当前 即 . 目录下查找

- 按照文件名查找

find / -name qwe  # qwe为文件名
find / -name *qwe*  # * 为模糊匹配

- 按照文件类型查找

find / -type d  # 查找目录文件
find / -type f  # 查找普通文件
find / -type l  # 查找链接文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值