xtrabackup的执行过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xtrabackup的执行过程相关的知识,希望对你有一定的参考价值。
XtraBackup的执行过程
执行全量备份过程中对数据库进行的操作
可以看出执行xtrabackup进行全量备份总共有两个线程
-
SET SESSION lock_wait_timeout=31536000的作用是:
因为如果某个会话中使用了lock tables语句对某表加了锁,或者某个会话在进行DDL,又或者某个会话正在进行一个大的事务,那么flush tables和flush tables with read lock会被阻塞。设置锁等待时间是为了防止innobackup执行获取全局锁超时而导致备份失败退出。 -
FLUSH NO_WRITE_TO_BINLOG TABLES的作用是:
关闭所有打开的表,强制关闭所有正在使用的表,并刷新查询缓存和预准备语句缓存。还会从查询缓存中删除查询结果。默认情况下flush语句会写入binlog,这里使用no_write_to_binlog禁止记录。查看Binlog发现,binlog内真的啥都没记录。 -
FLUSH TABLES WITH READ LOCK的作用是:
关闭所有被打开的表,并且使用全局锁锁住所有库的所有表(锁住之后只能被select,不能做其他操作)。当我们备份或者需要数据库的一致状态时,这个是最高效的方式。如果有事务存在,那么该事务提交时会hang住,不会回滚。但是不会阻止数据库往log tables(比如general_log和slow log)里插入数据。 -
FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS的作用是:
将innodb层的重做日志持久化到磁盘,然后再进行拷贝。说白了就是在所有的事务表和非事务表备份完成,获取全局读锁,且使用了show master status语句获取了binlog的pos之后,执行刷新redo log buffer中的日志到磁盘中,然后redo log copy线程拷贝这最后的redo log日志数据。为啥这样数据就是完整的?因为获取了全局读锁到unlock tables释放之前,不会再有请求进来。 -
UNLOCK TABLES的作用是:
释放全局读锁。 -
在flush tables with read lock和unlock tables之间,执行了下面操作
a、 拷贝所有非事务表,如系统MyISAM表
b、 将redo log buffer落盘
c、 拷贝redo log -
XtraBackup备份全过程
1、连接mysql进行版本检查。
2、通过读取配置文件,获取数据和日志文件位置。
3、扫描监控读取redo log,有新的redo log就拷贝到xtrabackup的logfile中。
4、拷贝共享表空间文件,innodb的.ibd数据文件
5、关闭所有打开的表,获取全局读锁,开始拷贝非Innodb的表和文件Starting to backup non-InnoDB tables and files
6、将redo log落盘,拷贝到xtrabackup的logfile中。
7、释放全局读锁。
8、记录binlog信息等,备份结束。 -
对全备进行恢复时,并没有对数据库进行任何操作,全量日志中无任何记录
- 增量备份只针对innodb和全量备份的不同之处在于:
A、在对增量innodb表等进行拷贝前,会统计变化的页儿的数量
SELECT ‘INNODB_CHANGED_PAGES‘, COUNT(*) FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE ‘INNODB_CHANGED_PAGES‘
B、使用全扫描进行增备,备份的共享表空间和ibd文件等都是增量,后缀为.delta
以上是关于xtrabackup的执行过程的主要内容,如果未能解决你的问题,请参考以下文章