1、背景:html
因为阿里云RDS生产库天天都须要备份且拷贝到自建读库,而若是使用阿里云的自动拷贝到只读实例, 费用过高, 故采用自编写同步脚本方法实现。mysql
2、前提: sql
1). 已开通阿里云RDS, 且开启按期备份功能。(备份功能生成备份文件供下载)数据库
2). 已在备份的目标服务器上安装mysql数据库。bash
3). 备份目标服务器已安装数据恢复工具Percona XtraBackup,您能够从Percona XtraBackup官网下载安装。服务器
3、脚本编写和测试app
1. 编写SHELL脚本工具
#!/usr/bin/env bash #########数据库基础信息############# #输入参数 URL_PATH=$1 #定义时间格式 DATE=`date +%Y%m%d%H%M%S` #日志记录文件地址 LOG_PATH=/data/db_bakup/bakup.log #保存备份个数 BACK_NUM=3 #备份文件存放路径 BAKUP_PATH=/data/db_bakup/ ########################## back_up(){ cd ${BAKUP_PATH} echo "===${DATE}-下载备份,URL_PATH=${URL_PATH}===" >> ${LOG_PATH} wget -c "${URL_PATH}" -O database.${DATE}.tar.gz echo "===建立文件夹用于存放解压文件===" >> ${LOG_PATH} mkdir database.${DATE} echo "===解压database.${DATE}===" >> ${LOG_PATH} tar -izxvf database.${DATE}.tar.gz -C database.${DATE} echo "===恢复解压好的备份文件===" >> ${LOG_PATH} innobackupex --defaults-file=/data/db_bakup/database.${DATE}/backup-my.cnf --apply-log /data/db_bakup/database.${DATE} echo "===中止数据库===" >> ${LOG_PATH} service mysql stop #删除数据库data软连接(个人数据库安装在/data/mysql/) rm -rf /data/mysql/data echo "===删除原数据库文件夹===" >> ${LOG_PATH} #删除原数据库文件夹 rm -rf database/ #改名 mv database.${DATE} database #新建数据库软连接 ln -s /data/db_bakup/database /data/mysql/data #建立版本号文件(方便辨认当前数据库备份是属于哪一个版本的) touch database/rev.database cat "${DATE}" >> database/rev.database echo "===修改文件属主===" >> ${LOG_PATH} chown -R mysql:mysql /data/db_bakup/database chown -R mysql:mysql /data/mysql echo "===重启数据库===" >> ${LOG_PATH} service mysql start #找出须要删除的备份 delfile=`ls -l -crt ${BAKUP_PATH}/*.tar.gz | awk '{print $9 }' | head -1` #判断如今的备份数量是否大于$number count=`ls -l -crt ${BAKUP_PATH}/*.tar.gz | awk '{print $9 }' | wc -l` if [[ $count -gt $BACK_NUM ]];then #删除最先生成的备份,只保留number数量的备份 rm $delfile #写删除文件日志 echo "delete $delfile" >> ${LOG_PATH} fi echo "===结束===" >> ${LOG_PATH} } back_up;
脚本保存文件为: /data/db_bakup/back_up.sh测试
2. 给文件增长运行权限阿里云
chmod u+x /data/db_bakup/back_up.sh
3. 启动备份命令:
sh /data/db_bakup/back_up.sh "备份文件下载连接"
注意:"备份文件下载连接" 从阿里云RDS管理控制台复制获取
4. 查看备份日志查看进程
tail -f /data/db_bakup/bakup.log -n 50
5. 登陆数据库查看是否已经切换到新的备份
mysql -uroot -p
6. 完毕~~~
参考文献:
原文出处:https://www.cnblogs.com/mhl1003/p/11691954.html