一、XtraBackup 的特点
-
非阻塞备份
-
热备份:XtraBackup 能够在数据库运行时进行备份,无需停止数据库服务或锁定表。这使得备份过程对数据库的正常运行几乎没有影响,特别适合高负载的生产环境。
-
无锁表操作:备份过程中不会打断正在进行的事务,确保数据的一致性,同时不影响数据库性能。
-
-
备份和恢复速度快
-
物理备份:XtraBackup 采用物理备份方式,直接备份数据文件,而不是逻辑备份(如 mysqldump)。这种方式备份和恢复速度更快,特别适合大规模数据库。
-
增量备份:支持基于时间点的增量备份,只备份自上次备份以来发生更改的数据,节省存储空间和备份时间。
-
压缩和流式备份:支持备份数据的压缩和流式传输,减少磁盘空间和网络带宽的使用,进一步提高备份效率。
-
-
版本兼容性
-
XtraBackup 8.0:专为 MySQL 8.0 设计,支持 MySQL 8.0 的所有新特性和功能。
-
向下兼容性限制:XtraBackup 8.0 不支持备份 MySQL 8.0 之前的版本。如果需要备份 MySQL 5.6 或 5.7,应使用 XtraBackup 2.4 版本。
-
版本匹配:确保 XtraBackup 版本与 MySQL 版本匹配,以避免兼容性问题。
-
二、下载
下载地址,选择对应MySQL版本的Percona XtraBackup
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.25-17/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.25-17.1.el8.x86_64.rpm
yum install percona-xtrabackup-80-8.0.25-17.1.el8.x86_64.rpm -y
三、XtraBackup的备份原理
1. 记录 LSN,复制 InnoDB 的数据文件,复制 redo log
-
LSN(Log Sequence Number) 是 InnoDB 的日志系统中用于标识事务日志位置的编号。LSN 是一个递增的值,用于记录数据库的更改。
-
XtraBackup 会记录备份开始时的 LSN,并复制 InnoDB 的数据文件(如
.ibd
和ibdata1
文件)。 -
同时,它会持续复制 redo log(重做日志),用于在备份过程中捕获所有对数据库的更改。
2. 加备份锁
-
在备份过程中,XtraBackup 会对事务引擎(如 InnoDB)的数据加一个轻量级的备份锁。这个锁的作用是确保在备份过程中不会丢失事务的更改。
-
这种锁不会阻塞事务的正常运行,因此 XtraBackup 可以在数据库运行时进行备份。
3. 备份完事务引擎的数据和日志后,锁定非事务表
-
事务引擎(如 InnoDB)的数据和日志备份完成后,XtraBackup 会锁定非事务引擎的表(如 MyISAM 引擎的表)。
-
锁定非事务表的目的是为了确保这些表的数据在备份时不会被修改,从而保证备份的一致性。
4. 复制非事务引擎的表数据文件
-
在非事务表被锁定后,XtraBackup 会直接复制这些表的数据文件(如
.frm
和.MYD
文件)。 -
由于非事务表没有事务日志,直接复制数据文件即可。
5. 查询 GTID 信息和 binlog 位点
-
GTID(Global Transaction Identifier) 是 MySQL 5.6 引入的一种全局事务标识符,用于标识每个事务的唯一性。
-
binlog 位点 是 MySQL 的二进制日志(binlog)的偏移量,用于记录事务的执行位置。
-
XtraBackup 会查询当前的 GTID 信息和 binlog 位点,以便在恢复时能够定位到正确的日志位置。
6. 停止复制 redo log
-
在备份完成后,XtraBackup 会停止复制 redo log,以确保备份的 redo log 是完整的。
7. 释放锁
-
在备份完成后,XtraBackup 会释放之前加的备份锁和对非事务表的锁定,以允许数据库继续正常运行。
8. 备份完成
-
XtraBackup 会将备份的数据文件、redo log、binlog 位点等信息打包,生成一个完整的备份集。
四、XtraBackup的恢复原理
Prepare 阶段
-
模拟崩溃恢复,将 redo log 回放到数据文件中
-
在 Prepare 阶段,XtraBackup 会启动一个嵌入的 InnoDB 实例,模拟数据库的崩溃恢复过程。
-
应用 redo log:将备份期间捕获的 redo log 应用到数据文件中,确保所有已提交的事务都被同步到数据文件。
-
回滚未提交的事务:将未提交的事务回滚,使数据文件处于一致性状态。
-
-
重建 redo log
-
在 Prepare 阶段完成后,XtraBackup 会重建 redo log,确保在恢复后的数据文件中,redo log 是空的。
-
这一步是为了确保 MySQL 在启动时不会再次应用备份期间的 redo log,从而避免数据不一致。
-
恢复阶段
-
将数据文件复制或者移动到 MySQL 数据目录
-
在 Prepare 阶段完成后,备份数据文件已经处于一致性状态,可以将其复制或移动到 MySQL 的数据目录中。
-
使用
--copy-back
参数可以将备份数据文件复制到 MySQL 数据目录。 -
确保 MySQL 服务对数据目录有正确的读写权限。
-
-
还原完成
-
数据文件成功复制到 MySQL 数据目录后,恢复过程基本完成。
-
-
启动 MySQL
-
启动 MySQL 服务,使用恢复后的数据文件。
-
在启动过程中,MySQL 会检查数据文件的状态,并确保其一致性。
-