在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进行重新载入