xtrabackup大致流程

212 阅读2分钟

**官方介绍: 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)
  • 停止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,以及其他清理工作