前言        

        这是一个基于shell编写能定期对数据库进行备份的bash脚本,在系统实际运行中,总会有各种意想不到的可能使系统宕机,对数据库进行定期的备份可以最大程度的减少宕机造成的损失,保障数据。


环境

        Linux Fullmultiusermode、Mysql 5.7、Shell


编写代码

准备阶段

        新建数据库备份文件保存的目录,然后再新建一个目录用来存放shell脚本文件,这里我选择在home目录下新建一个shcode作为我存放sehell脚本文件的常用目录(以下编写操作皆使用root用户身份);

1、首先创建Mysql数据库备份文件保存的目录;

#在mysql安装路径下的data目录中新建一个backup文件夹

mkdir /usr/local/mysql/data/backup

2、创建shell

#创建一个专门存放shell脚本文件的目录

mkdir /home/test/shcode

#跳到该目录下使用vim指令新建shell脚本文件,命名为backup_mysqldb.sh

vim backup_mysqldb.sh

 3、检查mysql用户名和密码是否能正常登入,若mysql服务已关闭需进行启动

shell 脚本备份mysql库指定表 数据库备份脚本shell脚本_linux

 编写阶段

1、准备基本信息

#获取开始时间

NOW=$(date "+%Y%m%d_%H-%M-%S")

echo "*- 当前时间:$NOW -*"

echo "*- 正在进行备份数据库db_test01......"

#备份文件的目录

BACKUP=/usr/local/mysql/data/backup

#数据库地址

HOST=localhost

#数据库用户名

DB_USER=root

#数据库密码

DB_PWD=password

#备份的数据库

DATABASE=db_test01

#创建备份文件目录,若不存在则创建

#每次备份的文件放在/usr/local/mysql/data/backup下,对应备份时的时间

[ ! -d $BACKUP/$NOW ] && mkdir -p $BACKUP/$NOW


 2、进行数据库备份

#创建备份文件的变量,数据库备份文件以.sql结尾,备份后还需将文件压缩为.gz文件,所以改文件名定义为备份时间.sql.gz

FILE=$BACKUP/$NOW/$NOW.sql.gz

#进行备份并使用gzip压缩

mysqldump -u$DB_USER -p$DB_PWD --host=$HOST -q -R --database $DATABASE  | gzip > $FILE

 此时备份文件绝对路径文件名为 /usr/local/mysql/data/backup/备份时间/备份文件名.sql.gz

3、对备份文件进行简单的检验,查看是否备份成功,以此来对管理员进行提示

判断条件

        A 备份文件在指定目录下存在并且为常规文件;

        B 该文件字节数大于0;

#检验文件是否备份成功

if [ -f $FILE -a -s $FILE ]

then 

        echo "***备份成功"

else

        echo "***备份失败!在查看到此提示信息后请及时检查并处理!"

fi        

 4、将/备份时间/备份文件名.sql.gz连同目录一起使用tar命令打包放在/usr/local/mysql/data/backup/

注 由于文件由时间命名,不要在文件名中加入冒号“:”,这样会导致tar失败

#打包备份文件的压缩文件及上级目录

FILE=$NOW.tar.gz

#切到/usr/local/mysql/data/backup/目录,并发送提示信息

cd $BACKUP

echo "*- 正在将备份资源打包为$FILE"

#打包

tar -zvcf $BACKUP/$FILE $NOW

结束阶段

注 此阶段所在路径/usr/local/mysql/data/backup/,不要切换到其他目录下进行操作

 1、备份结束,删除打包前的备份文件目录

rm -rf $NOW

2、清理过早的备份文件,这里以5天前为准,可根据实际情况自行更改

#找到5天以前的文件并删除

find -atime +5 -name ".tar.gz" -exec rm -rf {} \;

 3、程序结束,打印提示信息

#获取结束时间

NOW=$(date "+%y-%m-%d_%H:%M:%S")

echo "*- 数据库db_test01备份已完成"

echo "*- 当前时间:$NOW -*"

补充 写入并退出脚本文件的编辑模式

4、为root提供脚本文件的可执行权限,此处我直接给整个shcode目录添加了可执行权限

 chmod -R u+x /home/test/shcode/


测试脚本

注 以下代码为作脚本文件测试使用

1、执行脚本

sh backup_mysqldb.sh

 2、查看是否正确打印输出提示信息,若有异常信息,仔细检查代码

shell 脚本备份mysql库指定表 数据库备份脚本shell脚本_bash_02

 3、查看/usr/local/mysql/data/backup/目录下是否有对应时间的.tar.gz压缩文件

cd /usr/local/mysql/data/backup/

 

shell 脚本备份mysql库指定表 数据库备份脚本shell脚本_备份文件_03

 4、解压查看备份文件中的数据库信息

tar -zvcf 20220313_02-20-24.tar.gz

cd 20220313_02-20-24

gunzip 20220313_02-20-24.sql.gz

获得数据库备份产生的.sql文件,可使用cat指令进行查看

cat 20220313_02-20-24.sql

 此处不做展示


任务调度

1、 编写完成shell脚本且测试成功后进行任务调度,使用crond任务调度指定脚本执行的时间和周期

#进入任务编辑模式指定脚本执行时机

crontab -e

2、编写任务,ESC输入:wq保存 

shell 脚本备份mysql库指定表 数据库备份脚本shell脚本_bash_04

 3、使用crontab -l命令查看脚本是否成功加入命令调度

shell 脚本备份mysql库指定表 数据库备份脚本shell脚本_备份文件_05


 

后言

你好,很高兴认识你:

        本次关于“ 通过shell编写自动对数据库进行定期备份的脚本任务 ”的文章到此完结,全篇文章于深夜纯手工敲打,可能会有字符输入错误的情况,望多包含(应该不会,我抽空会检查我发布的每篇文章,确保准确和质量),若有疑问可以私信与我交流。

        如果你也喜欢编程,如果你也喜欢敲代码,如果你也喜欢技术,欢迎联系~

        我是

                爱敲代码的小王bro

再次 感谢阅览