之前记录下了window系统备份远程MySQL数据库的定时备份脚本(想要了解的可以去看看> windows压缩备份MySQL数据库),Linux系统的忘记记录了。这次把它也保存下来。

脚本内容非常简单,主要是利用MySQL的备份系统来做这件事。

#!/bin/bash    
mysqldump -hlocalhost -u[username] -p[password] [database] | gzip > /backup/database_$(date +%Y%m%d_%H%M%S).sql.gz

workdir="/backup/"

do_delete()
{
	file_name=$(find $workdir -name '*.sql.gz' -and -mtime +7  -type f -print)
    	echo file name is ${file_name}

        find $workdir -name '*.sql.gz' -and -mtime +7 -type f -delete
        rc=$?
        if [ ${rc} -eq 0 -a "${file_name}" ];then
            echo $(date) delete $(basename ${file_name}) SUCCESS!             
        else
            echo $(date) delete ${file_name} FAIL!            
         fi

}
do_delete

在根目录创建一个backup文件夹,将脚本放在这个文件夹内,给脚本可执行权限。

下面我们要用到的是Linux的crontab命令。

crontab常用参数如下:

  • -e 编辑工作表
  • -l列出工作表中的命令
  • r删除工作表
  • u [username] 操作某用户的工作表,省略则默认是当前用户的工作表

使用crontab -e编辑工作表,在工作表中加入下面的内容,让脚本每天凌晨3点执行。

0 3 * * * /backup/bakdb.sh

内容的规则如下:

 .---------------- 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 指定其他用户调度,如果不需要则不指定

*表示每年每月每天每时每分都执行该任务。

任务添加好了之后可以将crond服务重启:service crond restart