底层核心还是使用的mysqldump备份方式。
支持排查链接串种的部分数据库
支持排除数据库中的指定表
使用:
1.修改基础数据库信息
2.sh执行即可
#!/bin/bash
#数据库连接串信息
User="root"
Password="root"
Host="127.0.0.1"
Dir="/data/dbbak/mysql"
EmailTo="xxxx@google.com"
### 获取主机名、IP、日期和随机数
local_name=$(hostname --fqdn)
local_ip=$(/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|grep -v 172|awk '{print $2}'|tr -d "addr:" |head -n 1)
date=$(date +%Y%m%d-%H%M)
fen=$(($RANDOM%59+1))
# 邮件发送函数-需要自行实现
function sendMail() {
# 构造邮件标题和内容,这里简化了邮件发送逻辑
title="状态: $4 数据库备份: 时间: $1 IP: $2 主机: $3"
echo "正在发送邮件,主题: ${title} - OA日常备份"
# 注意:这里使用mail命令发送邮件,需要确保mail命令已配置好
echo "备份成功" | mail -s "${title} - OA日常备份" $EmailTo
echo "邮件发送成功。"
}
# 输出脚本开始时间
echo "数据库备份脚本开始执行于 $(date)"
echo
# 忽略数据库中的某些表
IGNORE_TABLE="--ignore-table=keeprisk_oa.salary_adjust --ignore-table=keeprisk_oa.salary_basic --ignore-table=keeprisk_oa.salary_report --ignore-table=keeprisk_oa.salary_subsidy --ignore-table=keeprisk_oa.wt_salary_input --ignore-table=keeprisk_oa.wt_salary_input_year_bonus"
# 创建目录
mkdir -p $Dir
echo "备份目录 $Dir 已创建(或已存在)。"
echo
#链接中需要排除掉的数据库,通过空格区分
EXCLUDE_DBS="information_schema performance_schema mysql sys zabbix street keeprisk_base test deqing tfyun pms-system keepriskframework"
# 遍历数据库并备份。注意这里排除了部分数据库。
for i in $(mysql -h$Host -P3306 -u$User -p$Password -e 'SHOW DATABASES' | grep -vE "Database|${EXCLUDE_DBS}")
do
echo
# 创建数据库备份目录
if [ ! -d "$Dir/$i" ]; then
mkdir -p "$Dir/$i"
echo "为数据库 $i 创建了目录 $Dir/$i。"
echo
fi
# 备份数据库,忽略特定表
echo "正在备份数据库 $i..."
echo
mysqldump -u$User -p$Password -h$Host -P3306 --single-transaction --quick --events --routines --databases $i $IGNORE_TABLE | gzip > "$Dir/$i/$i-$date.gz"
if [ $? -eq 0 ]; then
echo "数据库 $i 备份成功,备份文件位于 $Dir/$i/$i-$date.gz"
echo
else
echo "数据库 $i 备份失败!"
echo
fi
# 删除7天前的备份文件
echo "正在删除数据库 $i 超过7天的旧备份文件..."
echo
find "$Dir/$i" -type f -name '*.gz' -mtime +7 -delete
echo "旧备份文件已删除。"
echo
done
# 发送邮件(如果需要)-----TODO 邮件发送这里还存在一些问题
#sendMail "$date" "$local_ip" "$local_name" "Backup Success"
# 输出脚本完成时间
echo "数据库备份脚本执行完成于 $(date)"
exit 0