1. 程式人生 > >如何將阿裏雲mysql RDS備份文件恢復到自建數據庫

如何將阿裏雲mysql RDS備份文件恢復到自建數據庫

進程 .cn nec 寫到 rds 原因 indent bit edge

參考地址:https://help.aliyun.com/knowledge_detail/41817.html PS:目前恢復只支持 Linux 下進行。Linux下恢復的數據文件,無論 Windows、Linux 操作系統,MySQL 都可以正常使用 1、概述和軟件說明 1.1 概述   RDS MySQL 使用開源軟件 percona-Xtrabackup 對 MySQL 數據庫進行備份。需要下載該軟件,然後使用該軟件進行恢復。      1.2 軟件說明
  • 1.2.1 解壓軟件
  • a) RDS的備份文件是一個壓縮包,需要先解壓出來,才能恢復,這裏下載解壓工具 rds_backup_extract.sh目前只支持 64 位 Linux 系統
  • b) 軟件使用方式:
  1. bash rds_backup_extract.sh -f backup.tar.gz/back.xb.gz -C directory
  1. # -f 指定要解壓的備份集文件
  1. # -C 指定解壓到的目錄;-C 參數是可選的,如果不指定就解壓到當前目錄,如 bash rds_backup_extract -f backup.tar.gz
  • 1.2.2 恢復軟件
  • 恢復軟件請下載官方的 Percona-XtraBackup(下載地址:https://www.percona.com/downloads/XtraBackup/)官方提供各種平臺的安裝包,請根據自己的需要下載。RDS 備份使用的版本是 2.2.9,建議下載 2.2.9 或更新的版本使用。
  • (PS: 註意要選擇與自己的系統版本(查看版本命令:lsb_release -a)相對應的軟件包,我當時選錯了包安裝時就出問題了)
2、恢復流程 2.1 下載rds備份文件
  • 點擊查看如何下載
2.2 使用 rds_backup_extract.sh 工具解壓備份文件
  1. bash rds_backup_extract.sh -f /home/mysql/backup/hins575175_xtra_20150429091224.tar.gz -C /home/mysql/data
PS: 如果數據太大有可能解壓時報錯(blocked for more than 120 seconds),需要修改linux內核參數把下面內容追加到 /etc/sysctl.conf 文件中
vm.dirty_ratio = 10 vm.dirty_background_ratio = 5 原因:這個版本的內核 2.6.32 默認情況下會預留內存的 20% (由參數 vm.dirty_ratio 指定)作為 IO 的緩存,當臟頁達到這個閾值時,內核會將內存中的數據寫到磁盤上。寫到磁盤上這個過程是有 120 秒的超時限制的,所以我們看到了 blocked for more than 120 seconds 這句話。在大內存機器上,比如64G,那麽預留給 IO 緩存的內存有 12.8G。如果需要在 120秒內將 12.8G 到磁盤上需要 109MB/s (873Mbit/s) 的寫速度,這個在一般磁盤上都很難達到,所以發生了這個問題 2.3 恢復數據文件
  1. innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
技術分享圖片

技術分享圖片 出現如上圖說明恢復成功 2.4 配置文件修改 由於存在的版本問題,請將解壓文件 backup-my.cnf 中的 紅框內的參數項註釋掉,如下圖: 技術分享圖片 2.5 修改文件屬主
  1. chown -R mysql:mysql /home/mysql/data
2.6 啟動 MySQL 進程並且登錄驗證 啟動mysqld進程:
  1. mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
PS: 如果服務器原來的mysql已經啟動,則需要將mysql關閉 登錄mysql驗證
  1. mysql -u root
PS:這裏不要輸入mysql的密碼,直接用無密碼登錄 註意:
  • 恢復完成後,表 mysql.user 中是不包含 RDS 中創建的用戶,需要新建。
  • 新建用戶前請執行如下 SQL:
  1. delete from mysql.db where user<>‘root‘ and char_length(user)>0;
  1. delete from mysql.tables_priv where user<>‘root‘ and char_length(user)>0;
  1. flush privileges;

BY bjr 15:43:50

如何將阿裏雲mysql RDS備份文件恢復到自建數據庫