一、 xtrabackup備份恢復(fù)工作原理:
extrabackup備份簡(jiǎn)要步驟
InnoDB引擎很大程度上與Oracle類似,使用redo,undo機(jī)制,XtraBackup在備份的時(shí)候,以read-write模式打開(kāi)innodb的數(shù)據(jù)文件,然后對(duì)其進(jìn)行復(fù)制。與此同時(shí),XtraBackup還有另外一個(gè)線程監(jiān)視著transactions log,一旦log發(fā)生變化,就把變化過(guò)的log pages復(fù)制走,直到全部innoDB數(shù)據(jù)文件復(fù)制完成之后,停止監(jiān)控log buffer及日志復(fù)制。如果log buffer沒(méi)有及時(shí)寫(xiě)出將被日志的循環(huán)寫(xiě)特性覆蓋。xtrabackup在啟動(dòng)時(shí)會(huì)記住log sequence number(LSN),然后一頁(yè)一頁(yè)地復(fù)制InnoDB的數(shù)據(jù)。
xtrabackup在恢復(fù)期間對(duì)提交的事務(wù)前滾,未提交或失敗的事務(wù)進(jìn)行回滾,從而保證數(shù)據(jù)的一致性。因此對(duì)于InnoDB表在備份期間不會(huì)鎖表。由于XtraBackup其內(nèi)置的InnoDB庫(kù)打開(kāi)文件的時(shí)候是rw的,所以運(yùn)行XtraBackup的用戶,必須對(duì)InnoDB的數(shù)據(jù)文件具有讀寫(xiě)權(quán)限。
補(bǔ)充:
1.
在備份innodb page的過(guò)程中,XtraBackup每次讀寫(xiě)1MB的數(shù)據(jù),1MB/16KB=64個(gè)page。這個(gè)不可配置。讀1MB數(shù)據(jù)之 后,XtraBackup一頁(yè)一頁(yè)地遍歷這1MB數(shù)據(jù),使用innodb的buf_page_is_corrupted()函數(shù)檢查此頁(yè)的數(shù)據(jù)是否正常, 如果數(shù)據(jù)不正常,就重新讀取這一頁(yè),最多重新讀取10次,如果還是失敗,備份就失敗了,退出。在復(fù)制transactions log的時(shí)候,每次讀寫(xiě)512KB的數(shù)據(jù)。同樣不可以配置。
2. 如果要使用一個(gè)最小權(quán)限的用戶進(jìn)行備份,則可基于如下命令創(chuàng)建此類用戶:
mysql> CREATE USER 'bkuser'@'localhost' IDENTIFIED BY 'secret';
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'bkuser';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkuser'@'localhost';
mysql> FLUSH PRIVILEGES;
二、 完全備份演示及日志分析:
[root@mysql01 full]# innobackupex --user=root --password=oracle /xtrabackup/full/
170602 20:24:02 innobackupex: Starting the backup operation
IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackupex
prints "completed OK!".
170602 20:24:02 Connecting to MySQL server host: localhost, user: root, password: set, port: 3306, socket: not set
Using server version 5.6.25-log
innobackupex version 2.4.7 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 6f7a799)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /