定时备份云端数据库

在Linux服务器环境维护中,通常会mysqldump命令来备份数据库,通常命令如下

mysqldump -uusername -ppassword --databases databasename  > dumpfilename

基于上述命令,我们可以将导出的sql文件进行压缩和管理,编写为shell脚本后,整体shell脚本如下

#!/bin/bash
BakDir=/home/bak/mysql-back/database-back
LogFile=/home/bak/mysql-back/mysql_buckup.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
# 修改为自己的数据库名称
DB=database
DumpFile=$DB$Date.sql
GZDumpFile=$DB-$Date.sql.tar.gz

# 检查备份目录是否存在
if [ -d "$BakDir" ]
then  echo "[INFO]开始执行数据库备份程序"
else sudo mkdir $BakDir
fi

# 下面的/usr/bin是mysql安装目录的bin目录,如果你修改过直接使用你的目录即可
# 执行备份命令
cd $BakDir

# 此处修改为自己的root用户密码
echo "[INFO] /usr/bin/mysqldump -uroot -ppassword --databases $DB  > $DumpFile" >> $LogFile
/usr/bin/mysqldump -uroot -ppassword --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]备份任务执行结束"

检验:

使用 shmod 777 bakmysql.sh 来使文件变成可执行文件,使用./bakmysql.sh来执行此文件,执行之后可以在自己定义的备份目录下找到备份成功的压缩包

定时任务

Linux服务器中一般使用crontab来自动执行定时任务。

查看cron表达式的一些基本命令

service crond start    //启动服务
service crond stop     //关闭服务
service crond restart  //重启服务
service crond reload   //重新载入配置
service crond status   //查看服务状态 

使用service crond start来开启服务

使用 vi /etc/crontab 来查看配置文件(不要在此处进行配置任务,此处类似于是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

# 进入crontab的编辑配置
crontab -e

# 此处配置的意思为每天晚上七点半定时执行shell文件
30 19 * * * /home/bak/mysql-back/bakmysql.sh

# 通过crontab -l查看已配置的定时任务
crontab -l

使用service crond reload对crontab进行重新载入

上一篇:剑指架构师系列-Redis安装与使用


下一篇:Linux定时执行.sh脚本