用Linux实现MySQL数据库数据的定时备份

要求

在Linux环境中,用shell语言编写脚本,以备份时的时间作为文件名,对MySQL数据库的目标文件进行压缩,通过在Linux系统中添加任务调度,按照自己所需要的时间进行作业,同时根据自己的需求删除向前备份好的压缩包。

【注意】本文给出的代码是笔者在学习Linux过程中的dome,在代码方面会尽可能用多一点命令,方便自己熟练并牢记这些命令,所以,可根据自己需要写出更高效的代码。

脚本如下

脚本命名为mysql_db_backup.sh

#!/bin/bash

#完成数据库的定时备份
# 备份的路径
BACKUP=/root/backup/db
#当前的时间作为文件名
#!/bin/bash

#完成数据库的定时备份
# 备份的路径
BACKUP=/root/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)

echo "=========开始备份=========="
echo "=========备份的路径是:$BACKUP/$DATETIME.tar.gz"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=Jinghua

#创建备份路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"

#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST  $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME

#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "====备份文件成功======"

代码较为基础,看懂不难。所以,这里主要讲一下路径问题。首先,将目标数据库的数据备份到 $ BACKUP/$ DATETIME/$DATETIME.sql.gz中,然后在db目录下将名字为 $DATETIME的文件压缩到 $BACKUP/ $DATETIME中。

接下来,我们需要给 mysq_db_backup.sh 文件一个可执行的权限,用chmod命令,设置参数为744,后面跟上目标文件名mysl_db_backup.sh,回车即可。
在这里插入图片描述
这里说一下文件权限,rwx分被为可读、可写、可执行,其中r的默认值为4,w的默认为2,x的默认值为1,这些对目录的权限控制同样适用。

给mysql_db_backup.sh执行权限之后,我们可以尝试执行一下,结果如下图
用Linux实现MySQL数据库数据的定时备份_第1张图片
执行完之后,我们可以到备份目录下找到相对应的文件进行解压缩,即可得到相对应的文件。操作如下图:

先切换到backup/db目录下,在列出目录下的文件,我们可以看到目标压缩包 2019_09_18_165957.tar.gz。
用Linux实现MySQL数据库数据的定时备份_第2张图片
先输入tar -zxvf 2019_09_18_165957.tar.gz 进行解压,然后可以用 cd 2019_09_18_165957 切换到该目录下,用 ls -l进行查看里面的内容,我们可以看到 2019_09_18_165957.sql.gz,用gunzip 命令进行解压,即可得到我们的备份文件,即2019_09_18_165957.sql.
用Linux实现MySQL数据库数据的定时备份_第3张图片
到这里我们就备份成功了,我们可以查看一下里面的内容,用 more 2019_09_18_155957.sql 直接查看。效果如下图:
用Linux实现MySQL数据库数据的定时备份_第4张图片
最后,我们添加一个系统的任务调度。用 crontab -e 命令。
在这里插入图片描述
进去之后,在键盘上按下字母 i 进入编辑模式,然后输入如下内容,#为注释内容
在这里插入图片描述
写完之后,按 esc 键,然后 shift + :,输入wq,即可退出,数据库的备份即可在指定的时间进行自动备份。

在学习Linux的过程中,建议使用纯控制台学习,这样会更容易理解Linux的特点,对Linux文件系统有更深刻的印象。而且,在接触Linux后,就不怎么会想去碰它的可视化界面了,因为用命令是在太方便了。

你可能感兴趣的:(Linux)