希望在定时备份Linux中的数据库文件【以压缩包的形式】到我们的Linux本地文件夹中,当数据库发生问题,可以及时备份修复。
我们可以使用Linux的定时任务进行处理
首先我们需要在指定文件夹下建立一个脚本文件(xxx.sh)以及需要备份的目标文件夹
这里假设在**/usr/lib/mysql目录下新建back.sh和back文件夹**
这里分为两种不同的备份方式:
#!/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")
#!/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
此时再进行定时任务的执行,将会成功执行!!!!