背景介绍
在使用xtrabackup愉快的进行备份的同时,xtrabackup中由于锁带来的线上问题也是很令人头疼的~,所以就找个时间对xtrabackup中的三把锁以及遇见的线上问题进行简单梳理。
原理解析
- 第一步 :
LOCK TABLES FOR BACKUP
第一步:锁表,这一步发生在innoDB表[即事务类的表]备份完成后,非事务表备份之前;其次,这里加的是
MDL
锁,影响非事务类表的写操作以及所有表的DDL操作,但是对事物类的表读写操作是不做限制的。
- 第二步 :
LOCK BINLOG FOR BACKUP
锁住binlog发生在所有的非事务表拷贝完成后,这一步也是由
MDL
锁实现的。这一过程中锁住binlog,防止新的事物提交,保证redo log和binlog的一致性,redo log后续用来做崩溃恢复。
- 第三步 :
UNLOCK BINLOG
最后拷贝完成,释放资源。
备份日志中顺序如下:
LOCK TABLES FOR BACKUP
... copy .frm, MyISAM, CSV, etc.