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

  1. 備份

  1.1 根據備份方法不一樣能夠劃分爲:mysql

  • 熱備(Hot Backup)

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

  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的恢復便可

  

相關文章
相關標籤/搜索