xtrabackup致使MYSQL HANG起

Xtrabackup 是percona公司(mysqlperformanceblog)的開源項目,目的是實現相似innodb官方的熱備份工具InnoDB Hot Backup的功能,能夠幫助咱們對MySQL InnoDB類型的數據庫表進行在線熱備份。 mysql

Xtrabackup中包含兩個工具:
* xtrabackup – 用於熱備份innodb, xtradb表的工具,不能備份其餘表;
* innobackupex – 對xtrabackup封裝的perl腳本,提供了myisam表備份的能力; sql

好東西你們支持,要用, 但要用好,在這裏跟你們分享本身沒用好的案例; 數據庫

現象 : 在進行備份過程當中,MYSQL HANG起;全部操做不能進行(5分鐘左右); 致使重大故障。
分析: 當時就是在進行innobackupex 備份 ,因此突破點很是明確 ;
疑問: xtrabackup 不是熱備嗎?  怎麼會致使整個庫不能操做呢? 工具

日誌: 用過innobackupex的同窗確定看到過備份過程當中產生的日誌文件;
… …
>> log scanned up to (2033 543788660)
>> log scanned up to (2033 546355144)
>> log scanned up to (2033 548568390)
>> log scanned up to (2033 551355379)
>> log scanned up to (2033 553779581)
>> log scanned up to (2033 556022806)
>> log scanned up to (2033 557837545)
>> log scanned up to (2033 560262937)
>> log scanned up to (2033 562723545)
>> log scanned up to (2033 565187514)
>> log scanned up to (2033 567275222)
tar: monitor/rrd_value.ibd: file changed as we read it
110510 10:07:04  innobackupex: Starting mysql with options: –unbuffered –password=Xtrapassword –user=Xtrabak –host=127.0.0.1 –port=3306
110510 10:07:04  innobackupex: Connected to database with mysql child process (pid=29094)
>> log scanned up to (2033 569803877)
110510 10:07:08  innobackupex: Starting to lock all tables…
>> log scanned up to (2033 572163953)
>> log scanned up to (2033 574650634)
>> log scanned up to (2033 575060545)
110510 10:07:26  innobackupex: All tables locked and flushed to disk spa

110510 10:07:26  innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,
innobackupex: .TRG, .TRN, .ARM, .ARZ and .opt files in
innobackupex: subdirectories of ‘/home/mysql/data/mysql’
innobackupex: Backing up files ‘/home/mysql/data/mysql/mysql/*.{frm,MYD,MYI,MRG,TRG,TRN,ARM,ARZ,opt}’ (66 files)
>> log scanned up to (2033 575060545)
>> log scanned up to (2033 575060545)
innobackupex: Backing up files ‘/home/mysql/data/mysql/test/*.{frm,MYD,MYI,MRG,TRG,TRN,ARM,ARZ,opt}’ (48 files)
>> log scanned up to (2033 575060545)
>> log scanned up to (2033 575060545)
>> log scanned up to (2033 575060545)
innobackupex: Backing up files ‘/home/mysql/data/mysql/monitor/*.{frm,MYD,MYI,MRG,TRG,TRN,ARM,ARZ,opt}’ (17 files)
110510 10:07:49  innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ and .opt files 線程

在上面咱們會發現innobackupex有一個動做:
110510 10:07:08  innobackupex: Starting to lock all tables…
… …
110510 10:07:26  innobackupex: All tables locked and flushed to disk 日誌

就是這個過程鎖住了所有的庫和表。
這個過程在幹什麼?
咱們來回顧一下xtrabackup的整個過程:
——————————————–
###  複製全部.idb
複製物理文件 (固定每次1M) orm

###  同步 transaction log (每次讀寫512KB的數據,一直進行,直到結束)
XtraBackup在備份的時候, 一頁一頁地複製innodb的數據,並且不鎖定表,
與此同時,XtraBackup還有另一個線程監視着transactions log,
一旦log發生變化,就把變化過的log pages複製走。
因爲REDOL會重複利用, 因此要儘可能複製走;否則就會被覆蓋。 blog

###  鎖住實例
等全部IDB複製完後,就執行  lock all tables 同步

###  複製全部非INNODB表(如MYISAM等)
這時INNODB數據已經備份完成,還須要備份其餘引擎的數據,
因爲要達到數據一致,這時候必須在鎖住全部表後進行操做;

###  同步日誌
備份非INNODB引擎過程當中產生的日誌仍是須要複製的

###  釋放鎖
全部數據都備份完成後,在某個LSN狀態,釋放鎖

###  備份結束

到了這裏已經比較清楚爲何在熱備的時候,數據庫也會HANG起了。 熱備是針對INNODB的, 對MYISAM等非INNODB引擎在使用的時候,仍是要注意謹慎;

相關文章
相關標籤/搜索