我的java天地

crontab调用sh脚本定时备份mysql数据

一、启动mysql数据库

/ usr / local / mysql / bin / mysqld_safe  - user = mysql  &


二、编写sql脚本

SET   @TableName = CONCAT( ' sendrecord ' ,DATE_FORMAT(DATE_SUB(CURDATE() ,INTERVAL  1   month ), ' %Y%m ' )); 
SET   @BeginTime = DATE_SUB(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE()) - 1   day ),INTERVAL  1   month
); 
SET   @EndTime = DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE()) - 1   day
); 
SET   @CreateSqlStr = CONCAT(" CREATE   TABLE  `", @TableName ,"`  AS   SELECT   *   FROM  sendrecord  WHERE  sendtime  >   ' ",cast(@BeginTime as char)," 00:00:00 '   and  sendtime  <   ' ",cast(@EndTime as char)," 00:00:00 '
"); 
SELECT   @CreateSqlStr

PREPARE  CR  FROM   @CreateSqlStr

EXECUTE
 CR;

SET   @DeleteSqlStr = CONCAT(" DELETE   FROM  sendrecord  WHERE  sendtime  >   ' ",cast(@BeginTime as char)," 00:00:00 '   and  sendtime  <   ' ",cast(@EndTime as char)," 00:00:00 '
"); 
SELECT   @DeleteSqlStr

PREPARE  DE  FROM   @DeleteSqlStr

EXECUTE
 DE;

SET   @CommitSqlStr = CONCAT(" COMMIT
"); 
SELECT   @CommitSqlStr

PREPARE  CO  FROM   @CommitSqlStr

EXECUTE  CO;


三、编写sh脚本

# !/bin/sh
PATH =/ opt / mono / bin :/ usr / kerberos / sbin :/ usr / kerberos / bin :/ usr / local / sbin :/ usr / local / bin :/ sbin :/ bin :/ usr / sbin :/ usr / bin :/ usr / X11R6 / bin :/ usr / local / java / bin :/ root / bin :/ usr / local / mysql / bin
export PATH

mysql 
- uxuanwu  - p123456  << EOF

use  xuanwu;
source 
/ root / Toby / create .
sql

此脚本需注意必段段导入path变量才行,mysql连接-u-p后面跟的值无需空格才行的
四、启动crontab

56   16   16   *   *   / root / Toby / ts . sh  >>   / tmp / backup . txt

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务

这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:

分钟 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字

posted on 2010-12-16 17:03 tobyxiong 阅读(1645) 评论(0)  编辑  收藏 所属分类: linix


只有注册用户登录后才能发表评论。


网站导航:
 
<2010年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(3)

随笔分类(144)

随笔档案(157)

相册

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜