LSN(日志序列号)范围信息,比如:
·完全备份LSN号范围 0-16000
·增量备份LSN号范围 16001-17000
·第二次备份LSN号范围17001-18000
·通过LSN号码判定当前是完全还是增量,并且增量到哪种程度(从上一次到目前变化的数据)
对xtrabackup来讲,当我们使用完全备份+增量备份之后,如果我们期望恢复的时候期望使用完全+增量进行恢复必须知道以下几点:
1、事务日志中有些日志被提交还有些日志未被提交,而未提交的事物需要回滚;
2、一但如果在第一次增量中有一些事物在完全备份的时候没有被提交单是在做第一次增量备份的时候被提交了,在完全备份中回滚中去那么这么次还原就没有任何意义,所以使用xtra备份数据,并跟我们之前使用mysqldump恢复的流程一样,而是先使完全备份而后将完全备份做好预处理,只不过执行预处理的时候只对完全备份进行一半的处理;
3、只将已经提交的事物同步至数据文件,而未提交的事物不回滚;
4、所以只要有增量未提交的事物是不能回滚的,而后在已经提交的事物同步至于数据文件以后开始向完全备份中应用第一个增量备份(假如有多个增量备份的数据),将增量备份合并至完全备份中去,所以第一个增量中有些事物已经提交了但是完全备份数据中则没有被提交过,所以对其进行合并,合并完成则将第二个增量进行合并,以此类推。
5、合并完数据之后LNS号已经是从0至当前最新的LNS号码;完后则使用二进制再对其进行恢复。
因此当我们有增量备份的时候,一定不能回滚未提交事物,否则增量将无法使用,如果不再回滚未提交事物,那么最后一个增量也有可能存在未提交事物,那么这时只能启动mysql 让其对数据库进行修复操作,所以最后一个阶段是依赖于mysql自身存储引擎
使用xtrabackup实现完全备份的话过程非常简单,但需要注意的是必须只有执行权限的用户才能够去备份
如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:
mysql> CREATEUSER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’; #授权,这三个权限是保证备份的最小权限
mysql> FLUSHPRIVILEGES;
这里由于是测试环境,我们就使用root进行备份/还原
推荐阅读: