阿里雲RDS數據庫備份同步到自建庫方法(SHELL腳本)

1、背景:html

因爲阿里雲RDS生產庫天天都須要備份且拷貝到自建讀庫,而若是使用阿里雲的自動拷貝到只讀實例, 費用過高, 故採用自編寫同步腳本方法實現。mysql

2、前提: sql

1). 已開通阿里雲RDS, 且開啓按期備份功能。(備份功能生成備份文件供下載)數據庫

2). 已在備份的目標服務器上安裝mysql數據庫。bash

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

 

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. 完畢~~~

 

參考文獻:

RDS for MySQL 物理備份文件恢復到自建數據庫

 

原文出處:https://www.cnblogs.com/mhl1003/p/11691954.html

相關文章
相關標籤/搜索