Linux环境下使用crontab实现mysql定时备份
发布时间:2022-09-21 15:00:49 所属栏目:MySql教程 来源:
导读: 在Linux服务器环境维护中,通常会mysqldump命令来备份数据库,通常命令如下
mysqldump -uusername -ppassword --databases databasename > dumpfilename
基于上述命令,我们可以将导出的sql文件进
mysqldump -uusername -ppassword --databases databasename > dumpfilename
基于上述命令,我们可以将导出的sql文件进
|
在Linux服务器环境维护中,通常会mysqldump命令来备份数据库,通常命令如下 mysqldump -uusername -ppassword --databases databasename > dumpfilename 基于上述命令,我们可以将导出的sql文件进行压缩和管理,编写为shell脚本后,整体shell脚本如下 BakDir=/opt/mysql-back/database-back LogFile=/opt/mysql-back/mysql_buckup.log Date=`date +%Y%m%d` Begin=`date +"%Y年%m月%d日 %H:%M:%S"` cd $BakDir DB=test DumpFile=$DB$Date.sql GZDumpFile=$DB-$Date.sql.tar.gz # 检查备份目录是否存在 if [ -d "$BakDir" ] then echo "[INFO]开始执行数据库备份程序....." else mkdir $BakDir fi # 进入指定目录开始执行备份逻辑 -- 在使用crontab执行命令时,会因为绝对路径问题导致导出数据为null,需在mysql绝对路径下执行 # 下面的/opt/mysql/bin为我这边的mysql安装目录的bin目录 # 执行备份命令 echo "[INFO] /opt/mysql/bin/mysqldump -uroot -p123456 --databases $DB > $DumpFile" >> $LogFile /opt/mysql/bin/mysqldump -uroot -p123456 --databases $DB > $DumpFile mv $DumpFile $BakDir cd $BakDir # 对备份数据进行压缩 echo "[INFO] tar czvf $GZDumpFile $DumpFile" >> $LogFile tar czvf $GZDumpFile $DumpFile # 删除备份的sql文件 echo "[INFO] rm $DumpFile" >> $LogFile rm $DumpFile # 备份 备份的sql文件到指定目录 echo "[INFO] mv $GZDumpFile $BakDir" >> $LogFile mv $GZDumpFile $BakDir Last=`date +"%Y年%m月%d日 %H:%M:%S"` echo 开始:$Begin 结束:$Last $GZDumpFile 执行成功 >> $LogFile #清理备份,保留30天的备份 find $BakDir/* -mtime +30 -exec rm {} \; echo "[INFO]备份任务执行结束....." 上述脚本大概分为以下几个部分: 1、首先我们通过mysqldump命令将数据库备份下来,按照当前日期进行命名; 2、然后将数据库备份文件移动到指定位置 3、对数据库备份文件进行文件压缩并删除备份文件 4、清理一个月前的备份文件,任务执行结束; 就这样,shell脚本就编写完成了,直接使用sh命令去执行,数据库成功备份并压缩到指定目录; 接下来我们就需要使用定时任务,让定时任务去执行备份数据库的脚本;这里呢,采用crontab来指定这个定时任务,cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。 查看cron表达式的一些基本命令 service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 service crond status //查看服务状态 我们需要确保服务是开启的,如果不是,开启一下即可;查看crontab配置方式命令如下:vim /etc/crontab 可以看到如下: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # 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 如上,cron表达式的一些简单说明,基于这里,我们可以实现一些简单的cron表达式(稍微复杂一点的我不会...) 1 3 * * * /opt/mysql-back/mysql_buckup.sh 上面这个表达式的意思是,每天凌晨3点零1分执行脚本mysql_buckup.sh; 了解了cron表达式后,我们开始添加一个cron执行计划;命令如下 crontab -e # 按a进行编辑,输入 1 3 * * * /opt/mysql-back/mysql_buckup.sh # 然后wq保存,可以通过crontab -l查看已配置的定时任务 crontab -l 完成crontab任务计划配置后mysql备份,我们这边只需要重新加载一下配置文件即可,命令是service crond reload; 这样就可以实现定时执行任务了;下图为我这边近几日的执行结果 在这个过程中,有遇到一些坑,那就是使用crontab执行定时任务,导出的sql文件内容为空;后来改成了在mysql安装的路径的bin目录下执行的,解决这个问题;另外,还可以通过配置mysql的全局环境变量,也可以解决这个问题; (编辑:拼字网 - 核心网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐

