Linux系统维护笔记(三)定时备份Mysql数据库

Linux下定时备份数据库,需要两个步骤

1.编写备份数据库的脚本

#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=192.168.1.120
DB=test
USER=bak
PASS=123456
MAIL="ieflex@example.com"
BACKUP_DIR=/data/db_backup
SQL_FILE=${DB}_full_$DATE.sql
BAK_FILE=${DB}_full_$DATE.zip
cd $BACKUP_DIR
if mysqldump -h$HOST -u$USER -p$PASS --single-transaction --routines --triggers -B
$DB > $SQL_FILE; then
zip $BAK_FILE $SQL_FILE && rm -f $SQL_FILE
if [ ! -s $BAK_FILE ]; then
# 输出并发送通知邮件
echo "$DATE 内容" | mail -s "主题" $MAIL
fi
else
echo "$DATE 内容" | mail -s "主题" $MAIL
fi
# -ctime按文件创建时间来查找文件14天以上的进行删除
# -mtime按文件修改时间来查找文件
# -type d可以直接按目录进行删除
# find $BACKUP_DIR -maxdepth 1 -type d -mtime +3 -exec rm -rf {} \;
find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;

也可也用tar来压缩 

# 如果sql文件存在并且大小大于0就压缩,压缩使用tar命令
if [ -s $sqlFile ]; then
   tar -zcPf $tarFile $sqlFile && rm -f $sqlFile
fi
# 解压缩的时候用 tar -zxPvf 201811150200.tar.gz
# 这里需要注意一下完整路径压缩是要加参数-P解压也需要用到,另外-f一定要用在参数结尾直接跟文档路径

 2.用crontab定时执行编写好的备份脚本

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

# 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

 

  1、各字段的含义

 
字段允许值允许的特殊字符
秒(Seconds)0~59的整数, - * /    四个字符
分(Minutes0~59的整数, - * /    四个字符
小时(Hours0~23的整数, - * /    四个字符
日期(DayofMonth1~31的整数(但是你需要考虑你月的天数),- * ? / L W C     八个字符
月份(Month1~12的整数或者 JAN-DEC, - * /    四个字符
星期(DayofWeek1~7的整数或者 SUN-SAT (1=SUN), - * ? / L C #     八个字符
年(可选,留空)(Year1970~2099, - * /    四个字符

 

 

 

 

 

 

 

 

 

 注意事项: 

  每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:

  (1)*:表示匹配该域的任意值。假如在Minutes域使用*, 即表示每分钟都会触发事件。

  (2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。

  (3)-:表示范围。例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次 

  (4)/:表示起始时间开始触发,然后每隔固定时间触发一次。例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次. 

  (5),:表示列出枚举值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。 

  (6)L:表示最后,只能出现在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。 

  (7)W:表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份 。

  (8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。 

  (9)#:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。

实例

实例

3,15 * * * * command    每小时的第3和第15分钟执行

3,15 8-11 * * * command  在上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command 每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command  每个星期一的上午8点到11点的第3和第15分钟执行

30 21 * * * /etc/init.d/smb restart   每晚的21:30重启smb  

45 4 1,10,22 * * /etc/init.d/smb restart  每月1、10、22日的4 : 45重启smb

10 1 * * 6,0 /etc/init.d/smb restart  每周六、周日的1 : 10重启smb

0,30 18-23 * * * /etc/init.d/smb restart  每天18 : 00至23 : 00之间每隔30分钟重启smb 

0 23 * * 6 /etc/init.d/smb restart  每星期六的晚上11 : 00 pm重启smb 

* */1 * * * /etc/init.d/smb restart  每一小时重启smb 

* 23-7/1 * * * /etc/init.d/smb restart  晚上11点到早上7点之间,每隔一小时重启smb 

0 11 4 * mon-wed /etc/init.d/smb restart  每月的4号与每周一到周三的11点重启smb 

几个常用的命令

crontab -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

crontab -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

crontab -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

crontab -i:在删除用户的crontab文件时给确认提示。

输入crontab -e 增加,修改方法同vi

00 2 * * * /home/script/backupdatabase.sh

好了,定时备份Mysql数据库功能就实现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值