前言
这是一个基于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服务已关闭需进行启动
编写阶段
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、查看是否正确打印输出提示信息,若有异常信息,仔细检查代码
3、查看/usr/local/mysql/data/backup/目录下是否有对应时间的.tar.gz压缩文件
cd /usr/local/mysql/data/backup/
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保存
3、使用crontab -l命令查看脚本是否成功加入命令调度
后言
你好,很高兴认识你:
本次关于“ 通过shell编写自动对数据库进行定期备份的脚本任务 ”的文章到此完结,全篇文章于深夜纯手工敲打,可能会有字符输入错误的情况,望多包含(应该不会,我抽空会检查我发布的每篇文章,确保准确和质量),若有疑问可以私信与我交流。
如果你也喜欢编程,如果你也喜欢敲代码,如果你也喜欢技术,欢迎联系~
我是
爱敲代码的小王bro
再次 感谢阅览