1. InnoDB data files, redo log, binary log, 和relay log files(除了正在使用的log文件)被拷贝到备份,这个期间数据库服务可以想平常一样使用
    innodb的表结构和数据可能在这个期间发生变化,所以下面的步骤就是确保这些变化被捕捉到备份中
  2. 一个backup lock会被应用到服务器实例上,他会阻塞DDL操作(用户创建的临时表不受影响),但是不会阻塞DML操作(二进制日志未捕获的操作除外,如数据库的管理更改)。数据库上的大多数读写活动仍然被允许。应用此锁后,mysqlbackup将扫描自步骤1以来被DDL操作修改的InnoDB表,并相应地对备份发生的变更。
  3. 一个FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK语句被应用到所有非innodb的表,之后,任何与备份相关的非InnoDB表被复制。 如果没有用户创建的非innodb的表存在,这个步骤会被跳过
  4. 对服务器上的日志记录活动进行了短暂的阻塞,以便mysqlbackup收集日志记录相关信息,如当前InnoDB LSN、二进制日志位置、GTID、复制源或副本状态等。
  5. 非InnoDB表上的读取锁定被释放。
  6. 使用来自上述步骤4的信息,复制当前正在使用的二进制或中继日志文件的相关部分。这确保了自步骤1以来对InnoDB表的所有最新更改都会在备份中捕获,以便稍后将其应用于原始备份数据,使恢复的服务器处于一致状态。
  7. 服务器实例上的备份锁已释放。数据库现在恢复正常操作。
  8. 之前尚未复制的重做日志文件以及备份的所有元数据文件都将被复制或创建。
  9. 备份操作完成,mysqlbackup返回成功。