linux mysql tab补全_Linux环境下使用crontab实现mysql定时备份

在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任务计划配置后,我们这边只需要重新加载一下配置文件即可,命令是service crond reload;

这样就可以实现定时执行任务了;下图为我这边近几日的执行结果

在这个过程中,有遇到一些坑,那就是使用crontab执行定时任务,导出的sql文件内容为空;后来改成了在mysql安装的路径的bin目录下执行的,解决这个问题;另外,还可以通过配置mysql的全局环境变量,也可以解决这个问题;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值