阿里云RDS数据库备份同步到自建库方法(SHELL脚本)

时间:2021-09-15 06:27:52

一、背景:

由于阿里云RDS生产库每天都需要备份且拷贝到自建读库,而如果使用阿里云的自动拷贝到只读实例, 费用太高, 故采用自编写同步脚本方法实现。

二、前提:

1). 已开通阿里云RDS, 且开启定期备份功能。(备份功能生成备份文件供下载)

2). 已在备份的目标服务器上安装mysql数据库。

3). 备份目标服务器已安装数据恢复工具Percona XtraBackup,您可以从Percona XtraBackup官网下载安装。

  • MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方文档Percona XtraBackup 2.3
  • MySQL 5.7版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档Percona XtraBackup 2.4
  • MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0

三、脚本编写和测试

1. 编写SHELL脚本

#!/usr/bin/env bash
#########数据库基础信息#############
#输入参数
URL_PATH=$
#定义时间格式
DATE=`date +%Y%m%d%H%M%S`
#日志记录文件地址
LOG_PATH=/data/db_bakup/bakup.log
#保存备份个数
BACK_NUM=
#备份文件存放路径
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 

5. 登录数据库查看是否已经切换到新的备份

mysql -uroot -p

6. 完毕~~~

参考文献:

RDS for MySQL 物理备份文件恢复到自建数据库