场景
开发/测试数据为自己安装,未使用RDS,且开发/测试环境安装操作频繁,为防止数据库出现问题,影响开发/测试进度,现需要将开发/测试数据库定时备份到oss上。
下载oss工具ossutil
# 下载ossutil
wget https://gosspublic.alicdn.com/ossutil/1.7.7/ossutil64
# 授权
chmod 755 /usr/local/src/ossutil64/ossutil64
# 软链接到bin目录下直接执行
ln -s /usr/local/src/ossutil64/ossutil64 /usr/local/bin/ossutil64
创建备份数据库及上传至oss脚本
创建脚本文件:
touch mysql_backup_test.sh
vim 写入脚本内容:
#!/bin/sh
# mysql程序根目录
base_mysql_path=/usr/share/mysql-8.0
# 数据包临时目录
mysql_dump_path=/usr/local/src/ossutil64/backup
# 数据库配置
data_env="prod" #数据库所在环境
mysql_user="root" #真实数据库用户名
mysql_pass="" #真实数据库密码
# oss 配置 如果服务器跟oss是内网,记得使用内网地址
oss_endpoint="" #真实oss endpoint
oss_bucket="sc/data/mysql/${data_env}" #真实osss桶名
oss_accesskeyid="" #真实oss keyId
oss_accesskeysecret="" #真实oss keysecret
# 需要备份的数据库名
database="job_prod"
# 需要忽略的表
excluded_tables=(
xxl_job_log_report
)
random=`cat /proc/sys/kernel/random/uuid | md5sum |cut -c 1-9`
backup_name=${database}"_"`date +%Y%m%d`"_"${random}
echo "备份到 "${backup_name}
# 删除100天前的备份文件
del_name=${database}"_"`date -d"100 day ago" +%Y%m%d`
ignore_tables_string=""
for table in "${excluded_tables[@]}"
do :
ignore_tables_string+=" --ignore-table=${database}.${table}"
done
echo "开始备份 "`date +%Y-%m-%d\ %H:%M:%S`
cd ${mysql_dump_path}
# mysqldump database -uroot -proot --tables table1 table2 > backup.sql
mysqldump -u${mysql_user} -p${mysql_pass} ${database} ${ignore_tables_string} > ${backup_name}.sql
# 压缩包
tar zcf ${backup_name}.tar.gz ${backup_name}.sql
rm -f ${backup_name}.sql
# 上传到 oss
echo "上传到oss中 "`date +%Y-%m-%d\ %H:%M:%S`
/usr/local/bin/ossutil64 cp ${backup_name}.tar.gz oss://xxx-oss/${oss_bucket}/backup/${backup_name}.tar.gz -f -e ${oss_endpoint} -i ${oss_accesskeyid} -k ${oss_accesskeysecret}
echo "删除 "${del_name}
/usr/local/bin/ossutil64 rm oss://xxx-oss/${oss_bucket}/backup/${del_name} -r -f -e ${oss_endpoint} -i ${oss_accesskeyid} -k ${oss_accesskeysecret}
rm -f ${backup_name}.tar.gz
echo "备份完成 "`date +%Y-%m-%d\ %H:%M:%S`
创建定时任务crontab 定时执行脚本
执行 crontab -e 命令,编辑设置定时执行备份脚本:
#每天凌晨3:20执行mysql_backup_test.sh脚本
20 3 * * * /usr/local/src/ossutil64/mysql_backup_test.sh >> /usr/local/src/ossutil64/mysql_backup_test.log 2>&1
执行
ubuntu 执行 sudo service cron start
centos 执行 service crond restart 重启cron服务即可。