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引擎在使用的时候,仍是要注意谨慎;

相关文章
相关标签/搜索