下载xtrabackup
Software Downloads - Percona
选择对应系统和mysql版本的xtrabackup工具
使用xtrabackup备份
全量备份
首先查看是否存在损坏的重做日志:(这一步没有做的话,xtrabackup会出现报错)
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0;
Percona XtraBackup 8.0.29和INSTANT ADD/DROP Columns - abce - 博客园 (cnblogs.com)
修复上述查询出现的表:
OPTIMIZE TABLE tablename;
全部修复之后使用xtrabackup
进行备份
首先创建一个备份目录backup
,在backup
目录下创建 全量备份目录 base
,增量备份目录inc
.
开始进行全量备份
./xtrabackup --backup --target-dir=/backup/base >> /backup/base/backup_full_history_$(date +"%Y-%m-%d").log
对全量备份文件进行prepare处理,原因如下:If you try to start InnoDB with these data files, it will detect corruption and stop working to avoid running on damaged data. The step makes the files perfectly consistent at a single instant in time, so you can run InnoDB on them.--prepare
./xtrabackup --prepare --target-dir=/backup/base
此时如果需要使用该备份文件进行数据库恢复,则使用如下命令:
xtrabackup --copy-back --target-dir=/backup/base
增量备份
首先查看是否存在损坏的重做日志:(这一步没有做的话,xtrabackup会出现报错)
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0;
修复上述查询出现的表:
OPTIMIZE TABLE tablename;
全部修复之后使用xtrabackup
进行备份
开始进行增量备份(增量备份的前提是存在一份全量备份)
./xtrabackup --backup --incremental-basedir=/backup/base --target-dir=/backup/inc >> /backup/inc/backup_inc_history_$(date +"%Y-%m-%d").log
如果需要在上次的增量备份基础上再次进行增量备份,需要将--incremental-basedir
改为上次增量备份目录
./xtrabackup --backup --incremental-basedir=/backup/inc --target-dir=/backup/inc2 >> /backup/inc/backup_inc_history_$(date +"%Y-%m-%d").log
对增量备份文件进行prepare处理,xtrabackup会将增量备份加入全量备份中:
./xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \
--incremental-dir=/data/backups/inc1
这里注意:如果存在多个增量备份话,恢复时则需要将所有增量备份依次加入全量备份中
使用备份恢复
采用xtrabackup
为方便起见,xtrabackup 二进制文件可以选择将备份复制到服务器的 datadir
xtrabackup --copy-back --target-dir=/backup/base
其他方法
见恢复完整、增量、压缩的备份 - Percona XtraBackup
参考资料
percona官方文档
个人实践