Mysql備份還有這麼多套路,還不瞭解下?

架構文摘發表於2019-11-20

邏輯備份和物理備份

邏輯備份

邏輯備份用於備份資料庫的結構(CREAET DATABASE、CREATE TABLE)和資料(INSERT),這種備份型別適合資料量小、跨SQL伺服器、需要修改資料等場景。如mysqldump命令就是產生一個邏輯備份工具,使用mysqldump輸出的檔案包含CREATE TABLEINSERT語句,能夠直接重建表內容和表結構。

使用邏輯備份有以下優勢和劣勢:

優勢
  • 可移植性高,SQL語句可直接適用於其他SQL伺服器;
  • 在資料恢復之前可增加、修改資料;
  • 資料恢復粒度小可以是伺服器、資料庫、表級別;
  • 使用文字格式,可讀性高;
劣勢
  • 備份時需要訪問mysql伺服器,影響其他客戶端;
  • 需要將資料轉換成邏輯格式(SQL,CSV);
  • 如果命令執行在客戶端,mysql伺服器還需要將資料傳送給客戶端;
  • 因為輸出格式為文字檔案,佔用空間較大;

物理備份

物理備份是包括儲存資料庫內容的目錄和檔案的副本,這種型別的備份適用於需要在出現問題時快速恢復的大型重要資料庫。

優勢
  • 完整的Mysql檔案和目錄備份,只需要複製檔案不需要轉換,速度比邏輯備份更快;
  • 除了備份資料,還能備份配置檔案和日誌檔案;
  • 不需要執行Mysql伺服器就可以完成備份;
  • 備份工具簡單使用cp、scp、tar命令即可完成備份;
劣勢
  • 可移植性不高,恢復資料只適用於相同或類似的機器上;
  • 為了保持資料庫檔案的一致性,需要停機備份;
  • 恢復粒度不能按表或使用者恢復;

線上備份和離線備份

線上備份需要mysql伺服器處理執行狀態,以便備份工具從mysql伺服器中獲取資料。離線備份表示mysql伺服器處理停止狀態。兩種備份形式也可以稱為“熱備份”和“冷備份“。

線上備份的主要特性

  • 備份不需要停機,對其他客戶端影響較小其他連線能夠正常訪問mysql伺服器(依賴操作型別,如讀操作);
  • 備份需要加鎖,以免在備份期間對資料做出修改;

離線備份的主要特性

  • 備份期間伺服器不可用;
  • 備份過程更簡單,不會受到客戶端的干擾;

邏輯備份(mysqldump使用)

mysqldump屬於邏輯備份命令,使用mysqldump備份的優勢是它非常方便和靈活,可以直接編輯輸出檔案或者使用匯入到其他的SQL伺服器中去,但是它不能用作備份大量資料的快速解決方案,對於大資料量,即使備份花費的時候可以接受,但是恢復資料也可能會非常緩慢,因為執執行SQL語句會涉及磁碟I/O進行插入,建立索引等。mysqldump的使用方式非常簡單:

shellmysqldump [options] db_name [tbl_name ...]
shellmysqldump [options] --databases db_name ...
shellmysqldump [options] --all-databases
複製程式碼

使用mysqldump備份時要注意:資料庫的一致狀態,在執行mysqldump命令時要保證資料不會再發生變更,保持資料的一致性有二種方法:

  • 使Mysql伺服器只讀
  • 使用事務加上隔離級別:REPEATABLE READ

使用REPEATABLE READ事務隔離級別執行mysqldump命令(使用事務保持資料庫的一致狀態):

mysqldump --master-data=2 \
 --flush-logs  \
 --single-transaction  \
 --all-databases > /backup/`date +%F-%H`-mysql-all.sql  
複製程式碼

備份引數說明:

  • --master-data: 將二進位制日誌檔案的名稱和位置備份
  • --flush-logs: 開始備份之前重新整理mysql伺服器日誌檔案
  • --single-transaction:開始備份之前設定事務隔離級別為REPEATABLE READ然後傳送一個START TRANSACTION命令。
  • --all-databases:備份所有資料庫

物理備份(複製原始檔案)

為了保證複製檔案的完整性,備份原始檔案最好是停止mysql伺服器,複製原始檔案備份由以下步驟完成:

  1. 停止mysql伺服器
    $ mysqladmin shutdown
  2. 使用合適的工具複製原始資料檔案
    $ tar cf /tmp/dbbackup.tar ./data
  3. 備份完成後,執行mysql伺服器
    $ mysqld_safe

使用主從備份模式

使用mysqldumptar備份或多或少都會對業務產生影響,使用mysqldump備份需要對資料加鎖,加鎖就意味著其他客戶端操作受到限制。使用tar命令需要停止伺服器直接導致資料庫伺服器不可用,有沒有辦法能解決這兩種問題呢?答案是有的,就是使用主從備份模式。

在單機的基礎上增加一臺Slave機器對Master機器的資料進行同步:

開始備份時對Slave進行備份,這樣即使Slave停機或對資料加鎖也不會影響業務的正常使用,如果公司有條件或業務非常重要可以選擇這種方案來備份資料。




歡迎關注微信公眾號《架構文摘》,高質量技術文章第一時間推送。

相關文章