xtrabackup这个工具可以实现热备份。假如数据库比较大,xtrabackup在备份期间有大量的写操作,必然会导致备份开始和备份结束是不一样的。那xtrabackup是如何保证这种情况的哪?如何知道哪个块备份过 哪个块还没有备份。
收起https://www.percona.com/doc/percona-xtrabackup/2.3/how_xtrabackup_works.html
主要思路就是复制数据文件+重放redo,复制数据过程需要一些时间,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。在原始数据和备份数据的数据差距小到一定的差距后就可以进行锁表,然后补气所有的差距。