一、背景:

由于阿里云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 物理备份文件恢复到自建数据库

阿里云RDS数据库备份同步到自建库方法(SHELL脚本)的更多相关文章

  1. 【故障公告】阿里云 RDS 数据库服务器 CPU 100% 造成全站故障

    非常非常抱歉,今晚 19:34 ~ 21:16 园子所使用的阿里云 RDS 数据库服务器突然出现 CPU 100% 问题,造成全站无法正常访问,由此您带来了很大的麻烦,请您谅解. 故障经过是这样的.1 ...

  2. 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题

    最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...

  3. 阿里云 RDS 数据库又发 CPU 近 100% 的“芯脏病”

    最近云界发生了2件事,一件是大事,一件是小事,大事是阿里云与微软合作推出了开放应用模型 Open Application Model(OAM),小事是由于微软 SQL Server 在阿里云上水土不服 ...

  4. 阿里云RDS数据库改造迁移方案

    1. 改造原因 (1) 由于历史原因, 本应该是同一个库的表分布在两个数据库中,需要对这两个库进行合并. (2) 已有的数据库性能无法满足业务的增长需要, 查询卡,慢问题突出. (3) 当前自建Mys ...

  5. 阿里云rds数据库迁移实战(多数据源)

    由于某几个业务表数据量太大,数据由业务写,数据部门读. 写压力不大,读却很容易导致长时间等待问题(读由单独系统进行读),导致连接被占用,从而容易并发稍稍增长导致全库卡死! 于是,就拆库呗. 业务系统拆 ...

  6. 【故障公告】阿里云 RDS 数据库突发 CPU 近 100% 引发全站故障

    今天晚上9点我们收到阿里云的告警通知: [阿里云监控]华东1(杭州)-云数据库RDS版<cnblogsdb> [instanceId=xxx] 于21:00 发生告警, 前往诊断 CPU使 ...

  7. 阿里云RDS数据库备份文件恢复到本地mysql数据库

    一.安装mysql和xtrabackup  (1)安装mysql 因为RDS是5.6版本,所以我们本地的mysql数据库要与RDS版本对应. rpm -ivh http://repo.mysql.co ...

  8. 阿里云RDS数据库sql server 导入数据并添加作业小结

    在阿里云购买ECS服务器和RDS数据库时,要注意网络类型要一致,最好都是VPC,否则ECS不能在内网访问RDS,只能从外网访问:在RDS控制台左侧,数据库安全性的IP白名单中添加ECS外网IP:在数据 ...

  9. 阿里云mysql数据库备份还原

    1.下载备份包 在rds的备份恢复中点击下载,在弹出的窗口中复制内网下载地址(前提是目标服务器与rds内网互通,否则请复制外网地址) 在目标服务器中执行如下命令进行下载: wget -c '复制的地址 ...

随机推荐

  1. 使用Python+Selenium模拟登录QQ空间

    使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...

  2. python3模块

    一.sys模块 import sys #print(sys.path) #打印环境变量 #print(sys.argv) print(sys.argv[3]) Sys.argv[ ]其实就是一个列表, ...

  3. C/C++中new的使用规则

    本人未重视new与指针的使用,终于,终于在前一天船翻了,而且没有爬上岸: 故此,今特来补全new的用法,及其一些规则: 话不多说 C++提供了一种“动态内存分配”机制,使得程序可以在运行期间,根据实际 ...

  4. MySQL快速入门及常用命令

    数据库 笔记内容 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,F ...

  5. Linux 配置程序包源 Nuget

    编辑文件NuGet.Config vi ~/.nuget/NuGet/NuGet.Config 新增源 <add key="fz" value="http://19 ...

  6. shiro加密算法

    第一节的时候我介绍过,shiro有很多加密算法,如md5和sha,而且还支持加盐,使得密码的解析变得更有难度,更好的保障了数据的安全性. 这里我们要介绍的是md5算法,因为比较常用.首先我们来看看md ...

  7. Shel脚本-初步入门之《02》

    Shel脚本-初步入门-什么是 Shell 脚本 2.什么是 Shell脚本 当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,改程序就被称为 Shell 脚本.如果在 Shell 脚本 ...

  8. 003-OpenStack-镜像服务

    OpenStack-镜像服务 [基于此文章的环境]点我快速打开文章 1.安装和配置 控制节点(controller) 1.1 创库授权 glance mysql CREATE DATABASE gla ...

  9. springboot-项目获取resources下文件的方法

    spring项目获取resources下文件的方法   最近写读取模板文件做一些后续的处理,将文件放在了项目的resources 下,发现了一个好用的读取方法:   比如上边是你需要读取的文件:  读 ...

  10. Python内容

    1.Python介绍.计算机硬件.网络.变量.数据类型:列表+元组+字典+布尔值+字符串+数字+集合.格式化输出.if判断.for循环.while循环. 2.三元运算.字符编码.文件处理:r/rb(读 ...