shell脚本备份mysql5.7.8以前数据库异常通过mail465端口发邮件

shell脚本备份mysql5.7.8以前数据库异常通过mail465端口发邮件代码如下:

1、配置文件:

username=root
password=123456
backupsFileStr=/wocloud/db/backups
backupsFileDay=3
mysqldumpStr=/usr/bin/mysqldump
copydb=hebei,reportSystem
[email protected]
sendEmailTitle=测试邮件主题
sendEmailContent=测试邮件内容

2、代码:

注意:不同linux设备的sh路径可能不同,需通过which sh查看sh的绝对路径修改即可。

#!/bin/sh

#db_backups_conf.txt文件路径
db_backups_conf="/wocloud/shell/db_backups_conf.txt"

#判断文件是否存在
if [ -f "${db_backups_conf}" ];then
	
	echo $(date +'%Y-%m-%d %H:%M:%S')" 数据库配置信息文件存在,开始进行数据备份"

	#获取等号前内容,作为map中的Key值
	dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))
	
	#获取等号后内容,作为map中的value值
	dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))

	#创建一个空map
	declare -A map=()
	
	#通过循环,将db_backups_conf配置文件中的信息存储在map中
	for((i=0;i<${#dbArrOne[@]};i++))
	do
		map[${dbArrOne[i]}]=${dbArrTwo[i]}
	done	

	#获取备份数据库的字符串
	copyDb=${map["copydb"]}
	
	#获取收件人的邮件账号的字符串
	semdEmailTo=${map["semdEmailTo"]}
	
	#获取默认的字符串分隔符
	old_ifs="$IFS"
	
	#设置字符串分隔符为逗号
	IFS=","

	#将备份数据库value值的字符串进行分隔,获取一个数组
	dbArr=($copyDb)
	
	#将收件人的邮件账号value值的字符串进行分隔,获取一个数组
	semdEmailToArr=($semdEmailTo)

	#将字符串的分隔符重新设置为默认的分隔符
	IFS="$old_ifs"

	#获取当前年月日
	saveday=$(date +%Y%m%d)

	#获取超出备份天数的年月日
	delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)

	#定义一个是否需要发送异常提醒邮件变量
	isSendEmailStr=0

	#遍历要备份的数据库,删除两天前备份的数据文件
	for delDb in ${dbArr[@]};
	do
		echo $(date +'%Y-%m-%d %H:%M:%S')" 删除文件:"${map["backupsFileStr"]}/${delDb}_database_${delday}.sql

		{
			rm -f ${map["backupsFileStr"]}/${delDb}_database_${delday}.sql
		} || {
			isSendEmailStr=1
		}
		
	done

	#遍历要备份的数据库,备份数据文件
	for saveDb in ${dbArr[@]};
	do
		echo $(date +'%Y-%m-%d %H:%M:%S')" 备份数据库:"${saveDb}
			
		{
			${map["mysqldumpStr"]} -u${map["username"]} -p${map["password"]} ${saveDb} > ${map["backupsFileStr"]}/${saveDb}_database_${saveday}.sql
		} || {
			isSendEmailStr=1
		}
		
	done	
	
	#判断执行多个数据库备份,是否有数据库备份异常,如果有异常就发送邮件
	if [ ${isSendEmailStr} == "0" ];then
			echo $(date +'%Y-%m-%d %H:%M:%S')" 需要备份的数据库都备份正常"
		else 
			echo $(date +'%Y-%m-%d %H:%M:%S')" 需要备份的数据库有备份异常,开始发送邮件通知管理员"
			
			#遍历收件人的邮箱地址,逐个发送邮件
			for email in ${semdEmailToArr[@]};
			do
				echo $(date +'%Y-%m-%d %H:%M:%S')" 开始发送邮件:"${email}

				echo ""${map["sendEmailContent"]} | mail -s ""${map["sendEmailTitle"]} ${email}
			done
			
			echo $(date +'%Y-%m-%d %H:%M:%S')" 需要备份的数据库有备份异常,成功发送邮件通知管理员"
	fi
	
	echo $(date +'%Y-%m-%d %H:%M:%S')" 数据备份完毕,脚本执行完毕"

else
	echo "文件不存在"
fi

3、配置参数说明:

参数意义如下:
username:mysql数据库用户名
password:mysql数据库密码
backupsFileStr:备份文件路径
backupsFileDay保留几天的备份文件
mysqldumpStr:导出工具mysqldump的路径
copydb:备份的数据库,多个数据库用逗号隔开
semdEmailTo=收件人邮箱,多个收件人邮箱用逗号隔开
sendEmailTitle=测试邮件主题(文本内容中一定不能包含=)
sendEmailContent=测试邮件内容(文本内容中一定不能包含=)

4、使用注意事项:

使用注意事项:
1、默认的是.sh、.txt文件都要放在/woclod/shell脚本下,如果放置的路径变了,需要修改.sh中读取.txt配置文件的路径
2、对于不同的Linux环境下,要修改db_backups_conf.txt文件中的配置信息,比如mysqldump的路径等信息
3、备份异常发送邮件提醒采用的是mail,运行的linux上提前先安装好mail并配置到mail.rc发送邮件的信息才可以。

 

你可能感兴趣的:(mysql,shell)