建站不啰嗦,上手跟我做(二十六)定时任务备份 mysql 数据库

定时任务

启动服务

[root@localhost cron]# /sbin/service crond start

关闭服务

[root@localhost cron]# /sbin/service crond stop

重启服务

[root@localhost cron]# /sbin/service crond restart

重新载入配置

[root@localhost cron]# /sbin/service crond reload

查看服务状态

[root@localhost cron]# /sbin/service crond status

查看定时任务列表

[root@localhost cron]# crontab -l

创建一个定时任务

[root@localhost cron]# crontab -e
*/2 * * * * /var/spool/cron/backupMysql.sh

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... 个小时要执行,其馀类推。

定时任务记录文件

[root@localhost log]# ls /var/spool/cron
backupMysql.sh  root
You have new mail in /var/spool/mail/root
[root@localhost ~]# vim /var/spool/cron/root

*/2 * * * * /var/spool/cron/backupMysql.sh

crontab 语法和命令参数含义
crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]
参数说明
-e:编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l:显示某个用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r:从 /var/spool/cron 目录中删除某个用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i:在删除用户的 crontab 文件时给确认提示。
-v [UserName]: 列出用户 cron 作业的状态
file:file 是命令文件的名字, 表示将 file 做为 crontab 的任务列表文件并载入 crontab。如果在命令行中没有指定这个文件,crontab 命令将接受标准输入(键盘)上键入的命令,并将它们载入 crontab

注意:crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限 (比如说是 root) 才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。-u user:用来设定某个用户的 crontab 服务,例如,“-u ixdba”表示设定 ixdba 用户的 crontab 服务,此参数一般有 root 用户来运行。

查看定时任务日志

[root@localhost log]# tail -f -n 200 /var/log/cron
Oct 31 11:38:02 localhost run-parts(/etc/cron.daily)[6893]: finished logrotate
Oct 31 11:38:02 localhost run-parts(/etc/cron.daily)[6868]: starting man-db.cron

查看 email

[root@localhost log]# tail -f -n 200 /var/spool/mail/root
From root@localhost.localdomain  Thu Oct 31 11:45:01 2019
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
	id A280A45C3B5; Thu, 31 Oct 2019 11:45:01 +0800 (CST)
From: "(Cron Daemon)" <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: Cron <root@localhost> /var/spool/cron/backupMysql.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=9>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20191031034501.A280A45C3B5@localhost.localdomain>
Date: Thu, 31 Oct 2019 11:45:01 +0800 (CST)
/var/spool/cron/backupMysql.sh: line 1: mysqldump: command not found

数据库备份

backupMysql.sh

[root@localhost log]# vim /var/spool/cron/backupMysql.sh
# 备份文件放置的位置
backup_path=/tmp/
mysqldump -uroot -p123456  -hlocalhost  jsh >$backup_path$(date -d "today" +"%Y%m%d_%H%M%S").sql
# 保留的文件数目
backup_file_num=7
# 指定目录下文件数目
cd $backup_path
total_file_num=`ls -l | grep "^-" | wc -l`
if (( $total_file_num > $backup_file_num ))
    then
    echo "备份文件数超出设置,执行删除!"
    del_num=$[$total_file_num - $backup_file_num]
    ls -ltr| grep -v 'total' | grep "^-" | awk '{print $9}' | head -n $del_num | xargs rm -rf
    echo "删除文件数:"$del_num
else
    echo "存在备份文件数:"$total_file_num
fi
cd -


[root@localhost log]# chmod +x /var/spool/cron/backupMysql.sh   
[root@localhost log]# ls /var/spool/cron/  
backupMysql.sh  root

mysqldump 命令未找到

查看 mysql 所在目录
[root@localhost log]# find / -name mysql -print
/run/lock/subsys/mysql
/etc/selinux/targeted/active/modules/100/mysql
/usr/lib64/mysql
/usr/share/mysql
/opt/mysql
/opt/mysql/bin/mysql
/opt/mysql/include/mysql
/opt/mysql/data/mysql
设置软链接
[root@localhost ~]# ln -fs /opt/mysql/bin/mysqldump /usr/bin
[root@localhost ~]# ln -fs /opt/mysql/bin/mysql /usr/bin

生成的文件

[root@localhost ~]# ls /tmp
20191031_135401.sql  20191031_135601.sql