1. 程式人生 > >MySQL備份理論及mysqldump用法

MySQL備份理論及mysqldump用法

read 策略 長時間 配置文件 冗余 rep 線程 sql 差異

為什麽備份:
  • 災難恢復:硬件故障(冗余)、軟件故障(bug)、自然災害、******、誤操作、...
  • 測試:測試時,為了模仿真實環境中用戶訪問情況,通常需要用真實數據去做測試。

備份恢復的原則:

  1. 策略正確:平時要設計好備份還原所涉及到的人員,確保能做正確的事。
  2. 執行不出問題:平時做演練,以確保出現問題時,能做正確的事情。
  3. 出問題時做正確的事情。

異地災備

  • 必要性:防止同一臺機器、同一個網絡環境中、同一個物理機房不可用導致服務不可用。
  • 備份項:配置文件,周邊配置,周期性計劃任務。

備份註意事項:

  1. 能容忍最多丟失多少數據:決定了使用的備份手段和工具
  2. 恢復數據需要在多長時間內完成
    • 電商站點若發生故障,數據恢復時,一小時損失可能數以億計數據。若用二進制文件恢復,可能恢復時長極長,且可能因業務量大,單條語句寫入二進制文件順序不同導致數據與真實數據不一致。
  3. 需要恢復哪些數據
    • 線上生產數據集,線上認證,配置等
  4. 數據備份後需要經常測試備份的可用性,另一方面也可以增強恢復操作的效率,在真正需要恢復數據時做到有條不紊。

數據備份的類型

  1. 根據備份的數據集的範圍可分為完全備份和部分備份

    • 完全備份:備份整個數據集
    • 部分備份:備份整個數據集中的一部分,如部分表。
  2. 全量備份、增量備份、差異備份

    • 全量備份:備份全部數據
    • 增量備份:備份自上一次完全備份或增量備份以來變化的那部分數據
    • 差異備份:僅備份自上一次完全備份以來變化的那部數據
  3. 根據備份方式分為物理備份和邏輯備份

    • 物理備份:直接復制數據文件
    • 邏輯備份:從數據庫導出數據另存在一個或多個文件中
  4. 根據數據服務是否在線可分為熱備、溫備、冷備
    • 熱備:讀寫操作均可進行的狀態下所做的備份
    • 溫備:可讀但不可寫狀態下進行的備份;
    • 冷備:讀寫操作均不可進行的狀態下所做的備份;最可靠,但卻是最不可行的。可借助主從復制實現。

備份時需要考慮到的因素:

  1. 要不要鎖定資源,鎖定資源多長時間?
  2. 備份過程的時長?
  3. 備份時的服務器負載?
  4. 恢復過程的時長?

備份工具

  1. mysqldump

    • mysql服務自帶的備份工具,邏輯備份工具.
    • 可以做到完全、部分備份
    • 對InnoDB支持熱備,對MyISAM存儲引擎支持溫備。
  2. cp/tar

    • lvm2:快照(請求一個全局鎖),之後立即釋放鎖,達到幾乎熱備的效果;物理備份;
      • 註意:不能僅備份數據文件;要同時備份事務日誌;
      • 前提:要求數據文件和事務日誌位於同一個邏輯卷;
  3. Innobackup/xtrabackup

    • 由Percona提供,開源工具,支持對InnoDB做熱備,物理備份工具;
    • 支持完全備份、部分備份;完全備份、增量備份;完全備份、差異備份;
  4. mysqlhotcopy:幾乎冷備
  5. select:據說相當LOW
    • 備份:SELECT cluase INTO OUTFILE ‘FILENAME‘;
    • 恢復:CREATE TABLE
    • 導入:LOAD DATA

mysqldump用法

  1. 特點:支持邏輯備份、完全備份、部分備份;

    • 邏輯備份:數據服務要正常運行,監聽在某個端口,mysqldump可以通過端口訪問mysql。
    • 通過SELECT語句查詢後導出至一個文件,恢復時通過INSERT語句把所有查詢結果插入至數據庫。
    • 有可能會丟失精度
  2. mysqldump用法:

    • SYNOPSIS:
      • mysqldump [OPTIONS] database [tables]
      • mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 備份指定表
      • mysqldump [OPTIONS] --all-databases [OPTIONS] 備份所有表
    • OPTIONS

      • --all-databases 備份所有庫
      • --databases db1,db2.... 備份指定一到多個數據庫:
      • db 備份單個數據庫中的所有目標對象(不會自動創建庫,只是備份庫中的表、代碼、存儲過程、存儲函數、觸發器以及事件調度器等)
      • db table1,table2... 備份指定的表

      MyISAM存儲引擎:最多支持溫備,備份時要鎖定所有要備份表(若是備份哪個表鎖定哪個表,還原時各表時間點不一致)

      • -x, --lock-all-tables 鎖定所有庫的所有表,讀鎖
      • -l, --lock-tables 鎖定指定庫所有表

      InnoDB存儲引擎:支持溫備和熱備;

      • --single-transaction 創建一個事務,基於此快照執行備份;必須加上這個選項才支持熱備
        • 在REPEATABLE-READ隔離級別,mysqldump連進數據庫時看到的視圖是一致的,都是啟動事務那一刻的狀態。在這種情況下,啟動一個事務,備份的所有數據都是這個時間點的。

      其它選項:

      • -R, --routines 備份指定庫的存儲過程和存儲函數;
      • --triggers 備份指定庫的觸發器
      • -E, --events 備份事件調度器
      • --master-data[=#] 在備份的目標文件中記錄一個CHANGE MASTER TO語句,記錄備份的那一刻處於哪個二進制文件的哪個位置。
        • mysqldump導出數據時,當這個參數的值為1的時候,mysqldump出來的文件就會包括CHANGE MASTER TO這個語句,CHANGE MASTER TO後面緊接著就是file和position的記錄,在slave上導入數據時就會執行這個語句,salve就會根據指定這個文件位置從master端復制binlog。默認情況下這個值是1。
        • 記錄下來一個註釋的CHANGE MASTER TO 語句,僅為我們參考使用,不打算用它來設定從服務器復制線程的啟動通常就設置為2。
      • --flush-logs 鎖定表完成後,即進行日誌刷新操作;

MySQL備份理論及mysqldump用法