crontab定时备份数据库
问题背景
- 操作系统redhat有问题,vim/crontab -e 等操作文档命令时直接卡死,只能上传文档覆盖原服务器文档达到编辑文档的目的
- 需要用到系统crontab服务定时全量备份数据库
具体操作步骤如下
1. 编写定时任务脚本
mysql为docker安装,脚本在宿主机上执行docker容器命名进行备份。
# 创建并编写sh脚本
vim backup_db.sh
# 内容如下,脚本全路径记下下文用到
docker exec -i mysql /bin/bash -c 'mysqldump -uroot -pxxxx tim_prod --skip-extended-insert --hex-blob ' > /tim/mysql/data_back/data_`date +\%F`.sql;
2.编辑crontab任务
正常情况下输入crontab -e
可以直接进行编辑,但是本次操作的系统输入这个命令系统卡死无响应,只能本地编辑好sh文档上传至服务器和crontab -e
命令编辑效果一样
# 创建root文件(文件名称就是root没有后缀),第一条定时任务时定时备份整个数据库指定的脚本路径为上一步创建的sh脚本
1 0 * * * root sh /tim/mysql/back_script/backup_db.sh
1 2 * * * root find /share/qeoten/mysql_back -type f -ctime +15 -name '*.sql' | xargs ##rm -rf
# 创建后后文件上传至 /var/spool/cron 目录下如果存在则覆盖
重启crontab,使root配置文件生效
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
# 查看配置文件是否生效
crontab -l
3.查看crontab执行日志
若定时时间已过,但是没有成功执行,则查看具体定时任务执行日志
# 日志文件
/var/log/cron
# 查看日志,
Feb 21 11:20:01 PVVM0T0008 CROND[123933]: (root) CMD (sh /tim/mysql/back_script/backup_db.sh^M)
发现执行命令脚本后边多了 【M】字符,问题原因是,我在window上编辑的sh,两条定时任务中间有换行符导致的。解决方案:在Linux上编辑该文件,我操作的主机编辑命令会卡死,我是在另一台Linux服务器上编辑好该文件,然后再上传至目标服务器,达到linux下编辑该sh脚本的效果。然后再执行查看日志已经没有【M】,再查看备份目录,已出现备份文件,到此定时任务配置成功。
Feb 21 11:20:01 PVVM0T0008 CROND[123933]: (root) CMD (sh /tim/mysql/back_script/backup_db.sh)