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