脚本说明: 脚本默认备份全库,也可以备份某个表,可以设置保留周期,结果压缩,将备份结果发送邮件通知。
#!/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