一、XtraBackup 是什么?
XtraBackup(Percona XtraBackup)是一个用于 MySQL 和 MariaDB 数据库的开源备份工具,它允许创建物理备份,用于灾难恢复、数据库复制和数据迁移等工作。
XtraBackup具有以下特点:
- 非阻塞备份:备份期间不会锁表,不影响数据库正在运行的服务。
- 支持 InnoDB :可以高效地备份和还原 InnoDB 数据。
- 物理备份:备份数据库的实际数据文件,备份和还原速度更快。
- 增量备份:支持增量备份,节省存储空间和时间。
- 并行备份和还原:可以使用多个线程加速备份和还原过程,充分利用多核 CPU 的性能。
- 流式备份:支持流式备份,允许将备份数据发送到另一个服务器或存储位置,减少了临时磁盘空间的需求。
- 校验和验证:对数据块校验,以确保数据的完整性。
- 压缩和加密:支持数据压缩和加密,有助于减小备份存储要求并增强数据安全性。
- 兼容性:兼容各种 MySQL 和 MariaDB 版本。
二、XtraBackup 备份与还原步骤
1. 全量备份与还原
备份阶段
使用xtrabackup命令来执行备份。
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/opt/backup/20231108-1
这将在指定目录中创建一个备份,包括数据库文件和二进制日志。
停止MySQL,模拟故障
/etc/init.d/mysql.server stop
mv /opt/mysql/data /opt/mysq/data.bak
还原阶段
合并数据文件和日志文件,确保数据完整性。
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --prepare --target-dir=/opt/backup/20231108-1
还原
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back --target-dir=/opt/backup/20231108-1
修改数据目录权限
chown -R mysql. /opt/mysql/data
重启MySQL
/etc/init.d/mysql.server start
2. 增量备份与还原
备份阶段
增量备份可以在之前的备份上再次执行xtrabackup命令,但要加 incremental 参数。增量备份会捕获自上次备份以来的更改记录。
xtrabackup --backup --target-dir=本次增量备份目录 --incremental-basedir=上次备份目录
向表中插入测试数据
第一次增量备份
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/opt/backup/20231109-1 --incremental-basedir=/opt/backup/20231108-1
继续插入测试数据
第二次增量备份
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/opt/backup/20231109-2 --incremental-basedir=/opt/backup/20231109-1
模拟故障
/etc/init.d/mysql.server stop
mv /opt/mysql/data /opt/mysql/data.bak1
还原阶段
还原操作同样要加 incremental 参数
xtrabackup --prepare --apply-log-only --target-dir=全备目录 --incremental-dir=增备目录
除了最后一个增备,所有的备份还原都设置 apply-log-only 参数(只应用 redo log ,跳过 undo log ,避免未完成事务的回滚)
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --prepare --apply-log-only --target-dir=/opt/backup/20231108-1
将第一个或第N个增量备份合并到完全备份
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --prepare --apply-log-only --target-dir=/opt/backup/20231108-1 --incremental-dir=/opt/backup/20231109-1
将最后一个增量备份合并到完全备份
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --prepare --target-dir=/opt/backup/20231108-1 --incremental-dir=/opt/backup/20231109-2
还原
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back --target-dir=/opt/backup/20231108-1
修改目录权限
chown -R /opt/mysql/data
重启数据库
/etc/init.d/mysql.server start
验证数据
注意事项和建议:
注意事项和建议:
在备份和还原数据库之前,务必了解工具的详细用法和最佳实践。
如果你使用了压缩或加密选项,还原时需要相应地解压缩或解密备份文件。
定期测试备份和还原过程,以确保数据的完整性和可用性。
在生产环境中,最好在低负载时执行备份操作,以减少对数据库性能的影响。
备份和还原数据库是敏感操作,需要小心谨慎地执行。如果不熟悉备份和还原过程,建议先在测试环境中进行练习。