Xtrabackup 备份原理
Xtrabackup 备份原理
备份对任何系统来讲都是非常重要的一部分。作为一名DBA尤其如此,很多场景下必须要通过备份恢复数据,比如数据库升级,或者规模搭建备库等等。今天我们就谈谈备份恢复这个话题。众所周知备份分为冷备和热备,冷备:在数据库offline的情况下进行的备份,备份过程中是不可提供服务的;热备则是online的一种备份方式,热备过程中db对外正常提供服务 。今天主要是针对mysql数据库的用的热备工具xtrabackup来谈谈。使用mysql数据库我们基本上都会用到innodb存储引擎,支持事务。innobase官方有一套针对innodb备份的商业软件InnoDB Hot Backup,可以提供在线备份。percona官方提供了一个与之对应的开源版本的备份工具 — xtrabackup
Xtrabackup 是什么 ?
先聊一下xtrabackup是什么,Percona XtraBackup 是一款开源的 MYSQL 热备份工具 ,可以不阻塞的备份innodb和Xtradb的数据库,xtrabackup的优点:可靠高效的备份DB;备份过程中不中断事务处理;快速进行恢复等。
Xtrabackup备份细节
Xtrabackup备份原理
InnoDB存储引擎是支持事务的,有对应的事务日志,也就是我们所讲的redo日志。每一个
事务对innodb数据进行的修改都会记录到对应的redo日志中。当InnoDB启动时,会使用最
近一次checkpoint开始到现在的所有redo日志进行恢复,对事务已经提交但数据还没有写
入的部分,进行redo重做,也就是所说的前滚;将已经写到数据文件,但未提交的事务通
过undo进行回滚。
Xtrabackup 为了完成备份会做两个主要的工作:
任务一:
xtrabackup会在后台开启一个log-copying的线程,该线程会对redo log file进行监视,并把从lsn1(lsn1是Xtrabackup在启动时会从redo log file中获取最近一次的checkpoint对应的log sequence number lsn1 )开始增加的数据块(日志记录)不断的复制到备份集中一个叫xtrabackup_logfile的文件里面。日志copy操作,会在整个备份过程中一直进行,因为备份集做恢复的时候需要从lsn1开始到备份结束时所有日志记录,恢复原理就是 crash recover 的过程。
1 | 注: |
…
任务二:
xtrabackup在进行copy redo 日志的同时会copy innodb的data file , 当然这不是简单的复制,它使用了跟innodb类似的方式访问数据文件,访问数据字典,并以数据页为单位来进行copy。具体的细节如下:
1 | xtrabackup是以读写的方式打开数据文件的,尽管它不会修改数据。这是因为它使用内置的innodb的lib库 |
xtraback备份结尾
当数据文件复制完成,xtrabackup 会停掉log-copying线程,并在备份目录下创建一个
xtrabackup_checkpoints 的文件,该文件包含备份的类型,还有备份开始时的log sequence number,还有结束时的log sequence number 。备份过程中,我们会看到数据文件copy信息,也会看到日志复制线程重复的扫描日志文件,并进程copy的信息,信息如下:
1 | >> log scanned up to (3646475465483) |
注 : xtrabackup 的使用方式见之前的blog,最好参看官方文档
…
一点感悟
本文主要分析了一下xtrabackup工具的备份原理,以及备份过程中的细节。很多时候,作为DBA,把项目做好,支持好
的同时,技术细节也要把控到位 … 加油, boy