1.1 根據備份方法不一樣能夠劃分爲:mysql
ibbackup是InnoDB存儲引擎備份的首選方式,只不過是收費軟件。其工做原理以下:sql
1) 記錄備份開始時,InnoDB存儲引擎重作日誌文件檢查點的LSN數據庫
2) 複製共享表空間文件以及獨立表空間文件服務器
3) 記錄複製完表空間文件後,InnoDB存儲引擎重作日誌文件檢查點的LSN架構
4) 複製在備份時產生的重作日誌異步
ibbackup對InnoDB存儲引擎表的恢復步驟爲:工具
1) 恢復表空間文件性能
2) 應用重作日誌文件操作系統
XtraBackup實現增量備份日誌
XtraBackup是一款開源的備份工具,支持對於InnoDB存儲引擎的增量備份,工做原理以下:
1) 完成一個全備,並記錄下此時檢查點的LSN
2) 在進行增量備份時,比較表空間中每一個頁的LSN是否大於上次備份的LSN,若是是則備份該頁
須要備份MySQL數據庫的frm文件,共享表空間文件,獨立表空間文件(*.ibd),重作日誌文件。按期備份MySQL數據庫的配置文件my.cnf,這樣有利於恢復的操做。
也須要作好遠程異地備份,即容災防範。
優勢:
1. 備份簡單,只須要複製相關文件便可
2. 備份文件易於在不一樣操做系統,不一樣MySQL版本上進行恢復
3. 恢復簡單,只須要把文件恢復到指定位置便可
4. 恢復速度快,不須要執行SQL語句,也不須要重建索引
缺點:
1. InnoDB存儲引擎冷備的文件一般比邏輯文件大不少,由於表空間中存放着不少其餘數據,如undo段,插入緩衝等信息
2. 冷備不老是能夠輕易跨平臺。操做系統、MySQL版本、文件大小寫敏感和浮點數格式都會成爲問題
備份一樣在數據庫運行中進行,可是會對當前數據庫的操做有影響,如加一個全局讀鎖以保證備份數據的一致性
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.1 複製
複製(replication)是MySQL數據庫提供的一種高可用高性能的解決方案,通常用來創建大型的應用。工做原理分爲三個步驟:
1)主服務器(master)把數據更改記錄到二進制日誌(binlog)中。
2)從服務器(slave)把主服務器的二進制日誌複製到本身的中繼日誌(relay log)中。
3)從服務器重作中繼日誌中的日誌,把更改應用到本身的數據庫中,以達到數據的最終一致性。
2.2 快照+複製的備份架構
複製除了能夠做爲備份,還有以下主要功能:
經過對從服務器上的數據庫所在分區進行快照,能夠避免誤操做對複製的影響。當發生主服務器上的誤操做時,只須要將從服務器上的快照進行恢復,而後再根據二進制日誌進行point-in-time的恢復便可