使用crontab定时脚本备份Mysql数据

使用crontab定时脚本备份Mysql数据

需求:

希望在定时备份Linux中的数据库文件【以压缩包的形式】到我们的Linux本地文件夹中,当数据库发生问题,可以及时备份修复。
我们可以使用Linux的定时任务进行处理

首先我们需要在指定文件夹下建立一个脚本文件(xxx.sh)以及需要备份的目标文件夹

这里假设在**/usr/lib/mysql目录下新建back.shback文件夹**

这里分为两种不同的备份方式:

方式1:直接在Linux宿主下安装Mysql,则back.sh为:

#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=root
# 密码
PASSWORD=123456
# 要备份的数据库
DB=database_name

# Docker容器ID
#DOCKERID=********

# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录
DIR=/usr/backMysql/mysql  
echo 'Get system date: ' $DATE

if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR

echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")

# 使用docker进入mysql容器,执行mysqldump备份数据库文件
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
#docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  $DB | gzip > $DIR/$DB_$DATE.sql.gz

# 备份 直接安装在 linux 系统中的数据库
/usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# just backup the latest 7 days


#保留最近文件数7,删除其它多余的文件
ReservedNum=7
date=$(date "+%Y%m%d-%H%M%S")

FileNum=$(ls -l $DIR|grep ^- |wc -l)

while(( $FileNum > $ReservedNum))
do
    OldFile=$(ls -rt $DIR| head -1)
    echo  $date "Delete File:"$OldFile
    rm -rf $DIR/$OldFile
    let "FileNum--"
done 

echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

方式2:数据库安装在Docker容器中,需要配置Mysql在Docker容器中的id,通过Docker进入Mysql,然后执行对应的备份命令

#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=root
# 密码
PASSWORD=123456
# 要备份的数据库
DB=database_name

# Docker容器ID
DOCKERID=********

# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录
DIR=/usr/backMysql/mysql  
echo 'Get system date: ' $DATE

if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR

echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")

# 使用docker进入mysql容器,执行mysqldump备份数据库文件
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  $DB | gzip > $DIR/$DB_$DATE.sql.gz

# 备份 直接安装在 linux 系统中的数据库
#/usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# just backup the latest 7 days


#保留最近文件数7,删除其它多余的文件
ReservedNum=7
date=$(date "+%Y%m%d-%H%M%S")

FileNum=$(ls -l $DIR|grep ^- |wc -l)

while(( $FileNum > $ReservedNum))
do
    OldFile=$(ls -rt $DIR| head -1)
    echo  $date "Delete File:"$OldFile
    rm -rf $DIR/$OldFile
    let "FileNum--"
done 

echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

使用crontab进行定时任务的执行:

sudo crontab -e
# 添加执行命令每日凌晨2点备份一次
00 02 * * /usr/backMysql/back.sh

编写保存退出提示信息表示配置成功:

crontab: installing new crontab

此时可以通过crontab -l查看保存的定时任务,常用的crontab命令如下所示:

# 查看crontab执行记录
tail -f /var/log/cron
# 用于编辑定时任务; 定时任务编辑后,不用重启定时任务,定时任务会自动重新加载。
crontab -e 
# 用来查看当前有什么定时任务
crontab -l 
# 查看crontab日志
cat /var/log/cron.log


当定时任务执行后,会给我们发送一封邮件,成功或者失败皆有信息展示,查看邮件信息命令:

sudo cat /var/spool/mail/root

一般如果我们是普通用户,使用上面的00 02 * * /usr/backMysql/back.sh会提示定时任务执行失败邮件信息:

Permission denied

即说明我们的普通用户权限不足,此时我们需要修改我们的定时任务执行文件为:

00 02 * * /bin/sh /usr/backMysql/back.sh

此时再进行定时任务的执行,将会成功执行!!!!

你可能感兴趣的:(mysql,数据库,linux)