標籤:時間長度 log perl mysqldump pat 個數 二進位日誌 環境 iges
在實際生產環境中,資料是至關重要的。如何將資料實現安全冗餘,在出現意外或災害時快速恢複資料是挽救一個公司的關鍵所在。那麼,定期備份資料是一個基本的工作。
備份的類型:
根據備份的資料量可分為:
完全備份:備份整個資料集
部份備份:備份部分資料集
增量備份:僅備份最近一次完全備份或增量備份(如果存在的話)以來變化的資料
缺點:由於可能存在多個增量,恢複時較麻煩
差異備份:僅備份最近一次完全備份以來變化的資料
缺點:資料量大的話,比較浪費磁碟空間
根據備份的方式可分為:
物理備份:直接複製資料檔案進行備份
邏輯備份:與儲存引擎無關,從資料庫中“匯出”資料另存而進行的備份
根據備份時資料的可用狀態可分為:
熱備:備份時,資料可讀可寫
溫備:備份時,資料僅可讀
冷備:備份時,資料不可讀寫
備份時需要考慮的要點:
①能容忍最多丟失多少資料
②恢複資料需要的時間長度
③需要恢複哪些資料
④根據備份的資料量選擇合適的工具
⑤mysql的二進位日誌至關重要,一定要留存好以便實現基於時間點的還原
接下來將陳述一下基於mysqldump,xtrabackup進行資料備份和恢複。
一、mysqldump
是MySQL內建的適合所有儲存引擎的邏輯備份工具,支援完全和部份備份,支援溫備,對InnoDB支援熱備
mysqldump [options] db_name [tb1_name,...] (不會自動建立資料庫)mysqldump [options] --databases db_name ...mysqldump [options] --all-databases
常用的選項:
-uUSERNAME //備份時的使用者-pPASSWORD //備份時使用者的密碼-E,--events //備份指定資料庫相關的所有事件調度器-R,--routines //備份指定資料庫相關的預存程序和儲存函數--[skip-]triggers //(不)備份相關的觸發器--master-data[=#] 1:記錄為不被注釋的CHANGE MASTER TO語句; 2.記錄為注釋的CHANGE MASTER TO語句;(一般用2)--flush-logs //鎖定表完成後,執行flush logs命令;//溫備的選項,先鎖定備份庫,再啟動備份操作(MyISAM和InnoDB) --lock-all-tables //鎖定所有庫的所有表(生產環境慎用) --lock-tables //對某個單獨資料庫的所有表進行鎖定熱備的選項 --single-transaction //啟動一個巨大的事務
二、xtrabackup
是由Percona提供的支援對InnoDB做熱備(物理備份)的工具,可實現完全備份、增量備份。
備份命令:xtrabackup
推薦使用:innobackupex(對xtrabackup做了二次封裝的perl script),相對簡潔輕量;
建立備份恢複的使用者(基於最小許可權)
MariaDB [(none)]> CREATE USER ‘backupuser‘@‘192.168.1.102‘ IDENTIFIED BY ‘backuppass‘;MariaDB [(none)]> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO ‘backupuser‘@‘192.168.1.102‘;MariaDB [(none)]> FLUSH PRIVILIGES;
①完全備份
innobackupex --user=DBUSE --password=DBUSEPASS /path/to/BACKUP-DIR/
基於完全備份恢複前的整理操作:
innobackupex --apply-log /path/to/Backup-Dir(備份檔案所在的目錄)//整理無誤出現“Completed OK”後,可執行完全備份的恢複操作:innobackupex --copy-back /path/to/Backup-Dir(整理後的備份檔案目錄)//注意:執行innobackupex --copy-back命令時不需要啟動mysql服務,停止之前配置好mysql的資料目錄即可。恢複資料成功後不要忘記將資料檔案的屬主屬組改為mysql
②增量備份
innobackupex --incremental /backup --incremental-basedir=BASEDIR/*其中,BASEDIR指的是完全備份所在的目錄。 此命令執行結束後,innobackupex命令會在/backup目錄中建立一個新的以時間命名的目錄已存放所有的增量備份資料。 另外,執行過增量備份後再次執行時,其--incremental-basedir應該指向上一次的增量備份所在的目錄注意:增量備份僅能應用於InnoDB和XtraDB為儲存引擎的表;對於MyISAM表而言,執行增量備份其實進行的是完全備份*/
基於完全備份和增量備份恢複前的整理操作:
/*與完全備份恢複時整理操作的不同:(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之後,所有的備份資料將合并到完全備份上。(2)基於所有的備份將未提交的事務進行“復原”。*///於是,執行整理的命令:innobackupex --apply-log --redo-only BASE-DIR//接著執行innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1//而後是第二個增量:innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2//其中,BASE-DIR指的是完全備份所在目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,依此類推,如果有多個增量備份,每一次都要執行如上操作。//整理無誤後,執行恢複資料操作:innobackupex --copy-back /path/to/Backup-Dir(整理後的備份檔案目錄)
MySQL備份和恢複