天天看點

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

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

邏輯備份和實體備份

邏輯備份

邏輯備份用于備份資料庫的結構(CREAET DATABASE、CREATE TABLE)和資料(INSERT),這種備份類型适合資料量小、跨SQL伺服器、需要修改資料等場景。如

mysqldump

指令就是産生一個邏輯備份工具,使用

mysqldump

輸出的檔案包含

CREATE TABLE

INSERT

語句,能夠直接重建表内容和表結構。

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

優勢
  • 可移植性高,SQL語句可直接适用于其他SQL伺服器;
  • 在資料恢複之前可增加、修改資料;
  • 資料恢複粒度小可以是伺服器、資料庫、表級别;
  • 使用文本格式,可讀性高;
劣勢
  • 備份時需要通路mysql伺服器,影響其他用戶端;
  • 需要将資料轉換成邏輯格式(SQL,CSV);
  • 如果指令運作在用戶端,mysql伺服器還需要将資料發送給用戶端;
  • 因為輸出格式為文本檔案,占用空間較大;

實體備份

實體備份是包括存儲資料庫内容的目錄和檔案的副本,這種類型的備份适用于需要在出現問題時快速恢複的大型重要資料庫。

  • 完整的Mysql檔案和目錄備份,隻需要複制檔案不需要轉換,速度比邏輯備份更快;
  • 除了備份資料,還能備份配置檔案和日志檔案;
  • 不需要運作Mysql伺服器就可以完成備份;
  • 備份工具簡單使用cp、scp、tar指令即可完成備份;
  • 可移植性不高,恢複資料隻适用于相同或類似的機器上;
  • 為了保持資料庫檔案的一緻性,需要停機備份;
  • 恢複粒度不能按表或使用者恢複;

線上備份和離線備份

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

線上備份的主要特性

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

離線備份的主要特性

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

邏輯備份(mysqldump使用)

mysqldump

屬于邏輯備份指令,使用

mysqldump

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

mysqldump

的使用方式非常簡單:

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [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

使用主從備份模式

mysqldump

tar

備份或多或少都會對業務産生影響,使用

mysqldump

備份需要對資料加鎖,加鎖就意味着其他用戶端操作受到限制。使用

tar

指令需要停止伺服器直接導緻資料庫伺服器不可用,有沒有辦法能解決這兩種問題呢?答案是有的,就是使用主從備份模式。

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

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

推薦閱讀:

  • ”12306“秒殺系統的設計藝術
  • 萬變不離其宗,高并發秒殺系統的設計思考!
  • 技術總監的反思錄,我是如何失去團隊掌控的?
  • 假如有人今天把支付寶的存儲伺服器炸了,支付寶裡的錢是不是就沒了。。。
  • 再也不用擔心被虐啦,高頻率JVM面試題,都在這裡!
  • 餓了麼千萬級交易系統的重構設計思路
  • 支付系統高可用架構設計實戰,可用性高達99.999!
  • 大型網際網路公司分布式ID方案總結