一. 为什么需要备份
在实际生产环境中误删操作,硬件损坏都会导致数据不可用,这个时候我们就需要备份来实现灾难恢复。还需注意的是硬件级的冗余,例如raid,也不能取代备份操作,因为数据误删之后数据也是没有的,所以备份必不可少。
二. 备份的分类
1.物理备份和逻辑备份
物理备份 :它是直接拷贝mysql的存储在磁盘上的数据文件。这种备份使用的空间大,特别是innodb存储数据使用的表空间,因为表空间分配大小是按一定的比例增长,所以存在没有使用的空间。但是恢复时使用的时间少。
逻辑备份 :将数据以sql语句的形式导出。导出数据和恢复数据所用的时间多,但占用空间小。
2.热备、温备、冷备
热备 :对线上环境不见任何锁,不影响线上任何数据库操作。
温备 :在备份之间要获取锁,并施加锁。在加锁期间会影响某些操作。
冷备 :备份之前停掉服务器,然后在备份。
三. XtraBackup
XtraBackup是Percona旗下的一款开源热备工具,能够在不锁数据库的情况下备份MySQL数据。它能够备份InnoDB,XtraDB,MyISAM表,MySQL版本支持5.1,5.5,5.5,5.7。
XtraBackup具有如下功能:
能够对InnoDB实现热备,无需暂停数据库
能够对MySQL进行增量备份
对MySQL备份能够实现流式压缩并传输给其他服务器
MySQL服务运行时能够在MySQL 服务器之间进行表的迁移
能够很容易创建一个MySQL从服务器
备份MySQL时不会增加服务器负担
XtraBackup能够带InnoDB引擎创建的表实现热备,对MyISAM引擎实现温备。
四. XtraBackup如何实现备份
XtraBackup在备份数据是先备份InnoDB数据,再备份MyISAM数据,最后再记录此次备份的信息。
1.XtraBackup如何对InnoDB实现备份
在解释原理之前我们需要介绍InnoDB引擎的两个重要特性,一个事务特性,一个是存储数据所使用的表空间
1)事务
在InnoDB引擎中,一旦用户的操作涉及到修改MySQL数据,他并不会直接写入磁盘,就会产生一个事务,并将事务是记录在事务日志中的,而记录日志是使用的round-robin方式,事务日志空间大小一定,也就说后面的事务日志会覆盖前面。只有当用户提交事务后,数据才会持久化到磁盘。
2)表空间
InnoDB存储数据使用的是表空间,在这个空间中,InnoDB自行组织数据,所有的数据放在page上,每个page的大小固定默认是16KB,你可以通过innodb_page_size将其调大调小。一个page中除了存储数据库数据,还存储了这个表的元数据,用于描述此page。其中一个元数据就是log sequence number日志序列号,它是进行增量备份的基础。
3)备份原理
XtraBackup在开始的时候会记录日志序列号(LSN),然后开始拷贝磁盘上的数据文件。在此期间如果数据改变了,那么数据就处于不同的位置。数据改变了,我们不一定要拷贝变化的数据,我们可以记录在此期间的改变的事务日志即可,因为事务日志也记录了数据的改变。所以在拷贝数据期间,XtraBackup会启动一个后台进程监控事务日志,并拷贝在此期间写入的事务日志。这个过程是一个持续过程,因为事务日志会覆盖前面的。
4)增量备份实现原理
在前面提到过增量备份的实现依赖于LSN,它是一个page所具有的属