Percona Xtrabackup 备份工具
生成备份
$ xtrabackup --backup --target-dir=/data/backups/
注:--target-dir可以放在my.cnf配置文件中。如果指定的目录不存在,xtrabackup会创建目录。如果目录存在而包含文件,报错。如果日志文件与数据文件不在同一个目录下,可能需要显式的指定。
在备份过程中可能会有的问题:在备份过程中,日志拷贝线程每秒检查一次,查看是否有事务日志需要拷贝。但是如果日志拷贝线程跟不上事务日志写的速度,而导致事务日志被覆盖,会产生错误。
MySQL 8.0.17添加归档日志功能,在系统中设置innodb_redo_log_archive_dirs变量即可。MySQL通过innodb_redo_log_archive_start('label','subdir')、 innodb_redo_log_archive_stop();这两个函数来实现日志开启和关闭归档的功能。
关于innodb_redo_log_archive_dirs系统变量的设置,系统有一些要求。测试使用的是Percona xtrabackup 8.0.9版本。已经实现了在备份时使用归档日志的功能。
在测试过程遇到了这些问题:
Error: failed to fetch query result select innodb_redo_log_archive_start('label1', '1582251381198'): Cannot create redo log archive file '/arch/1582251381198/archive.e68d5e23-5139-11ea-b061-080027db4b37.000001.log' (OS errno: 13 - Permission denied)
xtrabackup: Redo Log Archiving is not used.
Error: failed to fetch query result select innodb_redo_log_archive_start('label1', '1582251957100'): Redo log archiving has been started on '/arch/archive.e68d5e23-5139-11ea-b061-080027db4b37.000001.log' - Call innodb_redo_log_archive_stop() first
xtrabackup: Redo Log Archiving is not used.
完成备份后,如果准备用于恢复,需要做一个Preparing Backup的操作
因为数据库数据文件在拷贝时不是一致的,它们拷贝的时间不同。在这一步需要做的是通过Xtrabackup工具提供的一种嵌入式的InnoDB,通过应用拷贝的日志对拷贝的数据文件做崩溃恢复(crash recovery)。
做法类似下面,给Xtrabackup工具的--prepare 选项传递需要准备(prepare)的目标目录:
xtrabackup --prepare --target-dir=/backups
注:对于已经prepared的数据文件,这个操作没有影响。Percona 建议在做 preparation 时不要中断,因为可能导致恢复的数据文件不一致。如果这个备份将来准备用于增量备份的策略中,就不要使用 --prepare 选项了,应该使用 --apply-log-only 选项。
做好了Prepare的动作后,就可以恢复数据库了,可能是像下面这样:
xtrabackup --copy-back --target-dir=/backups
注:xtrabackup工具也提供了其他的选项:--move-back
也可以通过OS命令比如rsync或者cp拷贝数据文件,注意权限和所有者。
下面是在做恢复时遇到的问题:
xtrabackup: Can't create/write to file '/usr/local/mysql-5.7.28-linux-glibc2.12-x86_64/log/ib_logfile0' (OS errno 17 - File exists)
[01] error: cannot open the destination stream for ib_logfile0
[01] Error: copy_file() failed.
生成增量备份
增量备份依据每个InnoDB page包含的日志序列号(LSN)。通过对于与之前的全备或者增量备份的LSN,以确定需要备份的页(Page)。
两种算法用于计算需要备份的 Page Set。一种是通过直接读取所有数据页以检查页的LSN大小;还有一种是通过changed page tracking功能。
增量备份实际上并不是对比数据文件与之前的备份数据文件。如果知道LSN,即使之前没有备份,也可以通过--incremental-lsn 选项做增量备份。增量备份简单地读取数据页并通过对比数据页的LSN与之前最近一次备份的LSN来确定需要备份的Pages。
创建增量备份前,先做了一个全备,比如像这样:
xtrabackup -uroot -poracle -S /tmp/mysql.sock --backup --target-dir=/data/backups/base
基于全备做增量备份,比如:
xtrabackup -uroot -poracle -S /tmp/mysql.sock --backup --target-dir=/data/backups/incr1 --incremental-basedir=/data/backups/base
基于增量备份做增量备份,比如:
xtrabackup -uroot -poracle -S /tmp/mysql.sock --backup --target-dir=/data/backups/incr2 --incremental-basedir=/data/backups/incr1
注:查看这三次备份的xtrabackup_checkpoints文件,下次的备份起点:from-lsn应该是之前备份的结束位置:to-lsn。如果last-lsn与to-lsn不同,说明在备份过程中服务器有流量。
准备增量备份
准备增量备份不同于准备全备。准备全备通过--prepare 选项通过日志文件应用提交的事务,回滚未提交的事务。这种做法在增量恢复时是不可行的。因为做增量备份时未提交的事务可能在随后提交了,如果在应用前一个备份时,回滚了当时备份时的事务,会使用后面的增量备份不可用。通过--apply-log-only选项对备份只做应用不做回滚,在增量备份的环境里是合理的。
先做全备恢复,比如:
xtrabackup -uroot -poracle -S /tmp/mysql.sock --prepare --apply-log-only --target-dir=/data/backups/base
应用第一个增量备份,比如:
xtrabackup -S /tmp/mysql.sock --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/incr1
应用最后一个增量备份,比如:
xtrabackup -S /tmp/mysql.sock --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/incr2
注:在应用完成最后一个增量备份后,可以同时应用日志做提交和回滚操作。其实即使不做回滚,MySQL启动时也会识别到系统有未回滚事务。在启动时,也会做crash recover。
压缩备份
Xtrabackup可以实现压缩备份,比如:
xtrabackup -uroot -poracle -S /tmp/mysql.sock --backup --compress --compress-threads=4 --target-dir=/data/backups/comress
准备压缩备份
在准备压缩备份前,需要先解压压缩备份。要解压压缩文件需要先安装qpress。
qpress 网站:http://www.quicklz.com/
在编译源码时遇到下面错误:
g++ -O3 -o qpress qpress.cpp aio.cpp quicklz.c utilities.cpp -lpthread
qpress.cpp: In function ‘int main(int, char**)’:
qpress.cpp:1039:39: error: ‘isatty’ was not declared in this scope
tty_stderr = isatty(fileno(stderr));
^
make: *** [g++] Error 1
解决方法:
vim qpress.cpp
--- a/qpress.cpp 2010-09-23 20:09:26.000000000 +0100
+++ b/qpress.cpp 2013-01-28 19:18:21.000000000 +0000
@@ -89,6 +89,7 @@
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
+#include <unistd.h>
#include "aio.hpp"
#include <stdarg.h>
#include <string> 解压压缩备份:
xtrabackup --decompress --decompress-threads=4 --target-dir=/data/backups/compress
注:默认解压压缩文件时不会删除压缩文件,--remove-original 选项可以删除压缩文件。即使没有删除压缩文件,在--copy-back时
也不会拷贝到数据目录(--datadir) 准备解压后的备份:
xtrabackup --prepare --target-dir=/data/backups/compress 恢复备份:
xtrabackup --copy-back --target-dir=/data/backups/compress
Percona Xtrabackup 备份工具的更多相关文章
- Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)
Percona Xtrabackup备份mysql大数据库(完整备份与增量备份) 文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 inno ...
- Database基础(五):使用binlog日志、XtraBackup备份工具、MySQL AB复制
一.使用binlog日志 目标: 利用binlog恢复库表,要求如下: 启用binlog日志 创建db1库tb1表,插入3条记录 删除tb1表中刚插入的3条记录 使用mysqlbinlog恢复删除的3 ...
- MySQL备份和恢复[4]-xtrabackup备份工具
xtrabackup工具介绍 Percona 公司 官网:www.percona.com percona-server InnoDB --> XtraDB Xtrabackup备份工具 perc ...
- MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]
MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份] 1.Xtrabackup的安装 percona-xtrabackup-2.2.3-4982.el6.x86_ ...
- Percona XtraBackup 备份原理说明【转】
本文来自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MyS ...
- Percona Xtrabackup备份mysql(转)
add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...
- MySQL · 物理备份 · Percona XtraBackup 备份原理
http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...
- Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)
原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...
- Percona XtraBackup 备份原理
前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server 和 ...
随机推荐
- Git详解之内部原理
前言 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认 ...
- 论文翻译:Mastering the Game of Go without Human Knowledge (第一部分)
长久以来,人工智能的一个目标是在那些具有挑战性的领域实现超过人类表现的算法.最近,AlphaGo成为了在围棋上第一个打败了世界冠军的程序.在AlphaGo中,使用深度神经网络来进行树搜索,评估位置,和 ...
- Spring Boot入门简介-Maven配置
一.简介 -- 简化Spring应用开发的一个框架: -- 整个Spring技术栈的一个大整合: -- J2EE开发的一站式解决方案. 二.背景: ① J2EE笨重的开发.繁多的配置.低下的开发效率. ...
- 计蒜客A1998 Ka Chang (分块+dfs序+树状数组)
题意 给你一个\(1e5\)的有点权的树,有\(1e5\)个操作: 1.给第\(x\)层的点加上\(y\) 2.求以\(x\)为根的子树的点权和 思路 首先处理出层数为x的所有点 操作2一般都是用df ...
- HDU6440 Dream(费马小定理+构造) -2018CCPC网络赛1003
题意: 给定素数p,定义p内封闭的加法和乘法,使得$(m+n)^p=m^p+n^p$ 思路: 由费马小定理,p是素数,$a^{p-1}\equiv 1(mod\;p)$ 所以$(m+n)^{p}\eq ...
- Go语言实现:【剑指offer】对称的二叉树
该题目来源于牛客网<剑指offer>专题. 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. Go语言实现: 方法一:递归 / ...
- Unity酱~ 卡通渲染技术分析(一)
前面的话 unitychan是日本unity官方团队提供的一个Demo,里面有很好的卡通渲染效果,值得参考学习 上图是我整理出来的shader结构,可以看到Unity娘被拆分成了很多个小的部件,我想主 ...
- 开源堡垒机jumpserver的安装
开源跳板机jumpserver安装 简介 Jumpserver 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统 Jumpserver 使用Pyt ...
- 文件图片上传目录 禁止执行php
apache配置上传目录禁止运行php的方法 导读: 禁止上传目录运行php等可执行文件可以从一定程度上增加网站的安全性, 禁止上传目录运行php的方法可以用.htaccess文件, 也可以直接在ap ...
- 分区格式化大于2 TiB磁盘
如果您要分区格式化一块大于2 TiB的作数据盘用的云盘(本文统一称为 大容量数据盘,小于2 TiB的数据盘统称为 小容量数据盘),您必须采用GPT分区形式.本文档描述了如何在不同的操作系统里分区格式化 ...