定时备份数据库并上传到OSS
场景:开发/测试数据为自己安装,未使用RDS,且开发/测试环境安装操作频繁,为防止数据库出现问题,影响开发/测试进度,现需要将开发/测试数据库定时备份到oss上。
-
下载oss工具ossutil
# 下载ossutil wget http://gosspublic.alicdn.com/ossutil/1.5.0/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=/temp/backup # 数据库配置 mysql_user="root" #真实数据库用户名 mysql_pass="123456" #真实数据库密码 # oss 配置 如果服务器跟oss是内网,记得使用内网地址 oss_endpoint="***" #真实oss endpoint oss_bucket="***" #真实osss桶名 oss_accesskeyid="***" #真实oss keyId oss_accesskeysecret="***" #真实oss keysecret # 需要备份的数据库名 database="tour_console" random=`cat /proc/sys/kernel/random/uuid | md5sum |cut -c 1-9` backup_name=${database}"_"`date +%Y%m%d`"_"${random} echo "备份到 "${backup_name} # 删除10天前的备份文件,修改10 del_name=${database}"_"`date -d"10 day ago" +%Y%m%d` # 需要忽略的表 excluded_tables=(test01) 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://${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://${oss_bucket}/mysql/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`
给脚本可执行权限
chmod 777 mysql_backup_test.sh
此时,可执行脚本 测试数据库是否有备份到oss
-
创建定时任务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
执行 service crond restart 重启cron服务即可。
参考:https://beltxman.com/3251.html