1. 程式人生 > 其它 >第八章 備份與恢復(學習筆記)

第八章 備份與恢復(學習筆記)

  1. 備份

  1.1 根據備份方法不同可以劃分為:

  • 熱備(Hot Backup)

  ibbackup是InnoDB儲存引擎備份的首選方式,只不過是收費軟體。其工作原理如下:

  1) 記錄備份開始時,InnoDB儲存引擎重做日誌檔案檢查點的LSN

  2) 複製共享表空間檔案以及獨立表空間檔案

  3) 記錄複製完表空間檔案後,InnoDB儲存引擎重做日誌檔案檢查點的LSN

  4) 複製在備份時產生的重做日誌

  ibbackup對InnoDB儲存引擎表的恢復步驟為:

  1) 恢復表空間檔案

  2) 應用重做日誌檔案

  XtraBackup實現增量備份

  XtraBackup是一款開源的備份工具,支援對於InnoDB儲存引擎的增量備份,工作原理如下:

  1) 完成一個全備,並記錄下此時檢查點的LSN

  2) 在進行增量備份時,比較表空間中每個頁的LSN是否大於上次備份的LSN,如果是則備份該頁  

  • 冷備(Cold Backup)

  需要備份MySQL資料庫的frm檔案,共享表空間檔案,獨立表空間檔案(*.ibd),重做日誌檔案。定期備份MySQL資料庫的配置檔案my.cnf,這樣有利於恢復的操作。

  也需要做好遠端異地備份,即容災防範。

  優點:

  1. 備份簡單,只需要複製相關檔案即可

  2. 備份檔案易於在不同作業系統,不同MySQL版本上進行恢復

  3. 恢復簡單,只需要把檔案恢復到指定位置即可

  4. 恢復速度快,不需要執行SQL語句,也不需要重建索引

  缺點:

  1. InnoDB儲存引擎冷備的檔案通常比邏輯檔案大很多,因為表空間中存放著很多其他資料,如undo段,插入緩衝等資訊

  2. 冷備不總是可以輕易跨平臺。作業系統、MySQL版本、檔案大小寫敏感和浮點數格式都會成為問題

  • 溫備(Warm Backup)

  備份同樣在資料庫執行中進行,但是會對當前資料庫的操作有影響,如加一個全域性讀鎖以保證備份資料的一致性

  1.2 按照備份後文件的內容,可以分為:

  • 邏輯備份

  邏輯備份是指備份出來的檔案內容是可讀的,一般是文字檔案。內容一般是由一條條SQL語句,或者表內實際資料組成。優點是可以觀察匯出檔案的內容,一般適用於資料庫的升級、遷移等工作。缺點是恢復所需要的時間往往較長。

  1. mysqldump備份工具用來完成轉存(dump)、資料庫備份及不同資料庫之間的移植,如從MySQL低版本資料庫升級到MySQL高版本資料庫,又或者從MySQL資料庫移植到Oracle、Microsoft SQL Server資料庫等。mysqldump語法如下:

  mysqldump [arguments] >file_name

  例如: mysqldump --all-databases > dump.sql / mysqldump --databases db1 db2 db3 > dump.sql / mysqldump --single-transaction(保證備份的一致性,僅對InnoDB儲存引擎有效) --where='b>2' test a > a.sql (完成一張表的匯出)

  邏輯備份的恢復語句:

  mysql -uroot -p <test_backup.sql

  : mysqldump不能匯出檢視,故而用mysqldump備份完資料庫後,還需要匯出檢視的定義,或者備份檢視定義的frm檔案,並在恢復時進行匯入,以保證mysqldump資料庫的完全恢復  

  2. SELECT....INTO OUTFILE

  該語句主要用於匯出一張表中的資料。語法如下:

  SELECT [column 1], [column 2] ...

  INTO

  OUTFILE 'file_name'

  [{FIELDS | COLUMNS}

  [TERMINATED BY 'string' ] //表示每個列的分隔符

  [ [OPTIONALLY] ENCLOSED BY 'char' ] //表示字串包含哪些字元

  [ ESCAPED BY 'char'] // 轉義符

  ]

  [ LINES

  [ STARTING BY 'string'] // 每行開始的字元

  [ TERMINATED BY 'string' ] 每行的結束符

  ]

  FROM TABLE WHERE....

  沒有指定任何FIELDS和LINES選項的預設設定如下:

  FIELDS TERMINATED BY '\t' ENCLOSED BY ' ' ESCAPED '\\'

  LINES TERMINATED BY '\n' STARTING BY ' '

  對SELECT INTO OUTFILE 匯出的資料進行恢復使用如下語句:

  LOAD DATA INTO TABLE a IGNORE1 LINES INFILE '/home/mysql/a.txt/' (其他設定與匯出類似)

  • 裸檔案備份

  複製資料庫的物理檔案,既可以在資料庫執行中複製(如ibbackup、xtrabackup這類工具),也可以在資料庫停止執行時直接進行資料檔案複製

  1.3 按照備份資料庫的內容來分,可以分為:

  • 完全備份

  對資料庫進行完整的備份

  • 增量備份

  在上次完全備份的基礎上,對更改的資料進行備份。(MySQL資料庫沒有實現基於LSN的增量備份功能,其通過二進位制日誌實現該功能,效率較低)

  • 日誌備份

  對MySQL資料庫二進位制日誌的備份,通過對一個完全備份進行二進位制日誌的重做(replay)來完成資料庫的point-in-time的恢復工作。MySQL資料庫複製(replication)的原理就是非同步實時的將二進位制日誌重做傳送並應用到從(slave/standby)資料庫。推薦的二進位制日誌的伺服器配置應該是:

  [mysqld]

  log-bin = mysql-bin

  sync-binlog = 1

  innodb_support_xa = 1

  還原binlog.000001, 可以使用如下命令:

  mysqlbinlog binlog.000001 | mysql -uroot -p test  

  1.4 快照備份

  MySQL資料庫本身並不支援快照功能,因此快照備份是指通過檔案系統支援的快照功能對資料庫進行備份。備份的前提是將所有資料庫檔案放在同一檔案分割槽中,然後對該分割槽進行快照操作。支援快照功能的檔案系統有GNU/Linux的邏輯管理器(Logical Volume Manager, LVM)。下圖為LVM工作原理:

  

  若干個磁碟分割槽連線為一個整塊的卷組(Volume Group),形成一個儲存池。管理員可以在卷組上任意建立邏輯卷,並進一步在邏輯捲上建立檔案系統。

  ·LVM使用了寫時複製(copy-on-write)技術來建立快照。當建立一個快照時,僅複製原始卷中資料的元資料(meta data),並不會有資料的物理操作,因此快照的建立過程是非常快的。

  當快照建立完成,原始捲上有寫操作時,快照會跟蹤原始卷塊的改變,將要改變的資料在改變之前複製到快照預留的空間裡,即寫時複製。對於快照的讀取操作,如果讀取的資料塊是建立快照後沒有修改過的,那麼會將讀操作直接重定向到原始捲上,如果要讀取的是已經修改過的塊,則將讀取儲存在快照中該塊在原始捲上改變之前的資料。採用寫時複製機制保證了讀取快照時得到的資料與快照建立時一致。

  

  2. 複製

  2.1 複製

  複製(replication)是MySQL資料庫提供的一種高可用高效能的解決方案,一般用來建立大型的應用。工作原理分為三個步驟:

  1)主伺服器(master)把資料更改記錄到二進位制日誌(binlog)中。

  2)從伺服器(slave)把主伺服器的二進位制日誌複製到自己的中繼日誌(relay log)中。

  3)從伺服器重做中繼日誌中的日誌,把更改應用到自己的資料庫中,以達到資料的最終一致性。

  

  2.2 快照+複製的備份架構

  複製除了可以作為備份,還有如下主要功能:

  • 資料分佈 由於MySQL資料庫提供的複製並不需要很大的頻寬需求,因此可以在不同的資料中心之間實現資料的複製
  • 讀取的負載平衡 通過建立多個從伺服器,可將讀取平均地分佈到這些從伺服器中,並且減少了主伺服器的壓力。
  • 資料庫備份 複製對備份很有幫助,但是從伺服器不是備份,不能完全替代備份
  • 高可用性和故障轉移 通過複製建立的從伺服器有助於故障轉移,減少故障的停機時間和恢復時間

  通過對從伺服器上的資料庫所在分割槽進行快照,可以避免誤操作對複製的影響。當發生主伺服器上的誤操作時,只需要將從伺服器上的快照進行恢復,然後再根據二進位制日誌進行point-in-time的恢復即可