shell脚本

#!/bin/bash

#先指定备份路径
#BACKUP=/home/back

#显示当前时间
DATATIME=$(date "+%Y-%m-%d_%H%M%S")
BACKUP=/home/back/${DATATIME}
if [ ! -d "${dir}" ]
then
	mkdir ${dir}
	echo "创建文件夹成功"
else
	echo "文件夹已经存在"
	fi


	#运行数据库的主机IP地址(执行备份的主机和运行数据库的主机可能不是同一台,如果同一台填自己IP即可)
	HOST=192.168.0.10

	#登录数据库的用户名
	DB_USER=root

	#数据库该用户名的密码
	DB_PW=123456

	#备份的数据库名(如需备份所有库,可参考下面步骤直接指定库名为 all)
	DATABASE=system_data

	#开始备份数据库提示语,仅提示作用,手动执行时方便判断到了哪一步
	echo "开始备份数据库${DATABASE}"

	#创建备份目录(如果指定的目录不存在,则新建目录,!-d不存在则成立,&&表示左端成立则执行右端动作)
	[ ! -d ${BACKUP}/${DATATIME} ] && mkdir -p "${BACKUP}/${DATATIME}"

	#sql操作:备份数据库
	#备份数据库(这里我按项目实际情况指定all-databases,备份所有库)
	mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST}  --all-databases  | gzip > ${BACKUP}/${DATATIME}/$DATATIME.sql.gz

	#将文件压缩成  tar.gz
	cd ${BACKUP}
	tar -zcvf $DATATIME.tar.gz ${DATATIME}

	#删除已备份的目录,由于压缩了文件,压缩前原有的可以删了
	rm -rf  ${BACKUP}/${DATATIME}

	#结束备份数据库提示语,仅提示作用(!e如果该文件存在,则成立,||左端成立,则执行右端,建议加上这个条件,否则即使上面的数据库备份不成功,下面仍然会提示备份成功,这样就没法有效判断)
	[ ! -e ${DATATIME}.tar.gz ] || echo "数据库${DATABASE}备份成功!"

	#(可省略)
	#推送到钉钉(这个步骤可省略,我根据项目需求想通过钉钉消息,就知道是否备份数据库。!-e数据库文件存在,则执行右端的python脚本,推送消息到钉钉群,钉钉脚本需要填写2个参数,1为用户名(>为了不@我,这里填1,也可填自己实际的钉钉号,这样钉钉机器人发消息就会@我), "DTcenter数据库${DATATIME} 备份成功!"为指定钉钉机器人发送的信息)
	#[ ! -e ${DATATIME}.tar.gz ] || ./dingding.py 1 test "DTcenter数据库${DATATIME} 备份成功!"


echo -e " \n ----------------> 删除过期文件 <---------------------------" 
# 判断文件夹数量是否大于7,防止程序意外停止,删除所有备份
dirCount=`ls -l /home/back/|grep "^d"|wc -l`
if [ ${dirCount} -gt 7 ]
then
# 删除超过七天的带"_"的目录
find /home/back/ -mtime +6 -name "*_*" -exec rm -rf {} \;
	echo -e " 删除过期文件成功"  
else 
	echo "删除过期文件失败,文件数量小于 7 " 
fi

其中路径/home/back/是mysql容器内的路径,就是你要把备份文件存放的位置,后面还加了时间,最后在容器中生成的路径是/home/back/2024-03-15_131501,这个路径下就是生成.sql的备份路径。
把上面的shell脚本放到你要发的路径中,这里我把shell脚本也是放到/home/back路径下。
如果要执行脚本看是否成功,执行命令是,进到shell脚本所在的目录

cd /home/back

执行,databack.sh是我的脚本文件名称

./databack.sh

设置定时任务,网上说的用crontab ,然后重启,

crontab -e #设置定时任务表达式
systemctl restart crond.service #重启命令

我这里是不生效的,我改用下面这个命令来设置定时任务。

vi /etc/pam.d/crond
* * * * * /home/back/databack.sh #定时表达式,每隔一分钟执行一次

然后重启定时任务

/etc/init.d/cron start

上面的这些操作都是在mysql容器内执行。