**官方介绍: docs.percona.com/percona-xtr… **
xtrabackup备份实现在xtrabackup_backup_func,核心流程如下:
- 如果设置了xtrabackup_throttle,创建io_watching_thread(限速)
- 拷贝redo log,从checkout_lsn到当前lsn (throttle会导致这一步慢)
- 创建redo log拷贝线程
- 加载innodb 表空间: 扫描并打开数据文件
- 创建数据文件拷贝线程,主要是ibd文件,参数--parallel可设置多线程
- 增量/全量,主要区别在于filter不一样;增量只拷贝大于特定lsn的page
- 数据文件拷贝完成后,调用backup_start
- 如果没有配置no-lock
- 如果配置了--safe-slave-backup,关闭SQL线程,等待Slave_open_temp_tables为0
- 预备份非innodb表文件,--rsync方式才会执行备份
- 加全局读锁,如果支持备份锁,会优先使用备份锁;并根据参数启动kill_query等线程
- Backup non-InnoDB tables and files
- 如果no-lock&&safe_slave_backup, stop slave thread
-
// There is no need to stop slave thread before coping non-Innodb data when // --no-lock option is used because --no-lock option requires that no DDL or // DML to non-transaction tables can occur.
-
- 如果配置了--slave-info,将show slave status信息记录到xtrabackup_slave_info文件
- 如没有使用备份锁或no-lock,会锁Binlog (LOCK BINLOG FOR BACKUP)
- 如果配置了--binlog-info,将SHOW MASTER STATUS信息记到xtrabackup_binlog_info文件
- 如没有使用备份锁或no-lock,会锁Binlog (LOCK BINLOG FOR BACKUP)
- 如果没有配置no-lock
- 停止redo log拷贝线程
- 通过事件信号,通知redo log线程退出: os_event_set(log_copying_stop);
- 记录元信息到xtrabackup_checkpoints,主要是lsn等信息
- backup_type:备份类型,增量/全量
- from_lsn: 备份开始的最近一次checkpoints的lsn
- to_lsn: 备份结束前最近一次checkpoints的lsn
- 调用backup_finish,与backup_start基本相反操作
- release all locks
- Copy buffer pool dump or LRU dump
- 将mysql信息记到backup-my.cnf文件
- 将备份信息记到xtrabackup_info文件
- 退出io_watching_thread,以及其他清理工作