脚本说明: 脚本默认备份全库,也可以备份某个表,可以设置保留周期,结果压缩,将备份结果发送邮件通知。
#!/bin/bash
数据表名称,可以为空
==========
table_name=$1
数据库名称
=====
database_name=test_data
备份周期,单位为天
=========
backup_period=30
备份目录
====
backup_dir=/date/mysql/backup
邮箱地址
====
email_address=xxxxx@mail.qq
MySQL账号
=======
mysql_user=root
MySQL密码
=======
mysql_password=root1234
获取当前日期
======
date_str=`date +%Y-%m-%d`
备份文件名
=====
if \[\[ -z "$table_name" \]\]; then
backup_file_name="${database_name}${date_str}.sql"
else
backup_file_name="${database_name}${table_name}_${date_str}.sql"
fi
压缩后备份文件名
========
if \[\[ -z "$table_name" \]\]; then
compressed_backup_file_name="${database_name}${date_str}.tar.gz"
else
compressed_backup_file_name="${database_name}${table_name}_${date_str}.tar.gz"
fi
备份文件路径
======
backup_file_path="${backup_dir}/${backup_file_name}"
压缩后备份文件路径
=========
compressed_backup_file_path="${backup_dir}/${compressed_backup_file_name}"
检查备份目录是否存在,如果不存在则创建
===================
if \[\[ ! -d "$backup_dir" \]\]; then
mkdir -p "$backup_dir"
fi
备份MySQL数据表
==========
if \[\[ -z "$table_name" \]\]; then
mysqldump -u"$mysql_user" -p"$mysql_password" "$database_name" \> "$backup_file_path"
else
mysqldump -u"$mysql_user" -p"$mysql_password" "$database_name" "$table_name" \> "$backup_file_path"
fi
压缩备份文件
======
tar -czvf "$compressed_backup_file_path" "$backup_file_path"
删除备份文件
======
rm -f "$backup_file_path"
检查备份结果
======
if \[\[ -f "$compressed_backup_file_path" \]\]; then
echo "备份成功!"
echo "备份文件路径:$compressed_backup_file_path"
subject="MySQL备份成功"
body="MySQL备份成功,备份文件路径:$compressed_backup_file_path"
else
echo "备份失败!"
subject="MySQL备份失败"
body="MySQL备份失败!"
fi
发送备份结果到指定邮箱
===========
echo "$body" \| mail -s "$subject" "$email_address"
删除过期备份文件
========
`find "$backup_dir" -mtime +"$backup_period" -name "*.tar.gz" -exec rm {} ;`
执行案例:
#默认备份整库
./mysql_back.sh
#备份test_table_name表
./mysql_back.sh test_table_name