Percona XtraBackup
简介
Percona XtraBackup是世界上唯一的开源免费MySQL热备份软件,可为InnoDB和XtraDB 数据库执行无阻塞备份。使用Percona XtraBackup,有一下优点
- 备份快速可靠地完成
- 备份期间不间断的事务处理
- 节省磁盘空间和网络带宽
- 自动备份验证
- 由于更快的恢复时间,正常运行时间更长
Percona XtraBackup可与MySQL,MariaDB和Percona Server配合使用。它支持InnoDB,XtraDB和HailDB 存储引擎的完全非阻塞备份。此外,它还可以通过在备份结束时暂时暂停写入来备份以下存储引擎:MyISAM, Merge和Archive,包括分区表,触发器和数据库选项。
这里有一点需要注意,在MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题。原因可能是MariaDB10.3以上版本的redo日志格式和之前不同了。
Percona的官方文档:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
Mariabackup的官方文档:https://mariadb.com/kb/en/library/mariabackup-overview/
这个物理备份工具的原理可以参考这篇文章: http://mysql.taobao.org/monthly/2016/03/07/
功能
- 创建热InnoDB备份而不暂停数据库
- 进行MySQL的增量备份
- 将压缩的MySQL备份流式传输到另一台服务器
- 在线MySQL服务器之间移动表
- 轻松创建新的MySQL从库
- 备份MySQL而不增加服务器负载
安装
官网下载页面: https://www.percona.com/downloads/XtraBackup/LATEST/
1.安装yum仓库
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
2.安装Percona XtraBackup
yum install percona-xtrabackup-24
常用选项
- - -apply-log-only
此选项仅在准备备份时,执行重做阶段。这对增量备份非常重要。 - - -backup
进行备份 - - -compress
此选项告诉xtrabackup使用指定的压缩算法压缩所有输出数据,包括事务日志文件和元数据文件。目前唯一支持的算法是quicklz。生成的文件具有qpress存档格式,即*.qpxtrabackup生成的每个文件本质上都是一个文件的qpress存档,可以通过qpress 文件存档提取和解压缩。 - - -copy-back
将先前制作的备份中的所有文件从备份目录复制到data目录位置。 - - -defaults-file=[MY.CNF]
仅读取给定文件中的默认选项。必须作为命令行中的第一个选项。必须是真实的文件; 它不能成为一种象征性的联系。 - - -incremental-basedir=DIRECTORY
创建增量备份时,这是包含完整备份的目录,该备份是增量备份的基础数据集。 - - -incremental-dir=DIRECTORY
准备增量备份时,这是增量备份与完整备份组合的目录,以进行新的完整备份。 - - -move-back
将先前制作的备份中的所有文件从备份目录移动到其原始位置。由于此选项会删除备份文件,因此必须谨慎使用。 - - -target-dir=DIRECTORY
此选项指定备份的目标目录。如果该目录不存在,则xtrabackup会创建它。如果目录确实存在且为空,则xtrabackup将成功。 但是,xtrabackup不会覆盖现有文件; - - -user=USERNAME
此选项指定连接到服务器时使用的MySQL用户名 - - -password=PASSWORD
此选项指定连接到数据库时要使用的密码 - - -prepare
使xtrabackup在使用创建的备份上执行恢复
完全备份
- 完全备份
xtrabackup --user=root --password=centos --backup \
-S /tmp/mysql.sock \
--target-dir=/backup/fullback
完全备份的恢复
- 准备备份
使用该选项进行备份后,您首先需要准备它以便恢复它。数据文件在准备之前不是时间点一致的,因为它们在程序运行时的不同时间被复制,并且在发生这种情况时它们可能已被更改。如果您尝试使用这些数据文件启动InnoDB,它将检测损坏并自行崩溃,以防止您在损坏的数据上运行。该步骤使文件在一个时刻完全一致,因此您可以在它们上运行InnoDB
xtrabackup --prepare --target-dir=/backup/fullback
- 恢复全备
xtrabackup --copy-back --target-dir=/backup/fullback
- 修改权限
chown -R mysql:mysql /usr/local/mysql/data/
至此一次完全备份与恢复完成
增量备份
无论xtrabackup和innobackupex工具支持增量备份,这意味着它们可以只复制自上次备份以来发生变化的数据。
增量备份有效,因为每个InnoDB页面都包含一个日志序列号或LSN。该LSN是整个数据库系统的版本号。每个页面的LSN显示它最近的更改。
增量备份会复制其LSN比先前的增量备份或完整备份的LSN更新的每个页面。有两种算法用于查找要复制的此类页面集。第一个可用于所有服务器类型和版本的是通过读取所有数据页来直接检查页面LSN。Percona Server提供的第二个 功能是在服务器上启用更改的页面跟踪功能,该功能将在更改页面时记录这些功能。然后,该信息将在紧凑的单独的所谓位图文件中写出。该xtrabackupbinary将使用该文件只读取增量备份所需的数据页,从而可能节省许多读取请求。如果xtrabackup二进制文件找到位图文件,则默认启用后一种算法。即使位图数据可用,也可以指定 读取所有页面。xtrabackup --incremental-force-scan
增量备份实际上并不将数据文件与先前备份的数据文件进行比较。实际上,如果您知道其LSN,则可以使用它 来执行增量备份,甚至不需要先前的备份。增量备份只是读取页面并将其LSN与最后一个备份的LSN进行比较。但是,您仍需要完整备份来恢复增量更改; 如果没有完整备份作为基础,增量备份将毫无用处。xtrabackup --incremental-lsn
- 创建一个全备
xtrabackup --user=root --password=centos --backup \
-S /tmp/mysql.sock \
--target-dir=/backup/fullbackup
- 基于全备做一次增量备份
xtrabackup --user=root --password=centos --backup \
-S /tmp/mysql.sock \
--target-dir=/backup/inc1 \
--incremental-basedir=/backup/fullbackup
增量备份的恢复
- 准备基础备份(全备)
xtrabackup --prepare --apply-log-only --target-dir=/backup/fullbackup
- 准备增量备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/fullbackup \
--incremental-dir=/backup/inc1
- 恢复
xtrabackup --copy-back --target-dir=/backup/fullbackup
- 修改权限
chown -R mysql:mysql /usr/local/mysql/data/
至此一次完全备份与恢复完成
备份的几个重要文件
- backup-my.cnf
MySQL配置文件的一些比较重要的配置
[root@localhost fullbackup]# cat backup-my.cnf
# This MySQL options file was generated by innobackupex.
# The MySQL server
[mysqld]
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=50331648
innodb_fast_checksum=false
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0
server_id=0
redo_log_version=0
server_uuid=bbaeacc7-b80a-11e8-8da1-000c2937ff87
master_key_id=0
- xtrabackup_info
记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。
[root@localhost fullbackup]# cat xtrabackup_info
uuid = dcc274b7-b80b-11e8-8da1-000c2937ff87
name =
tool_name = xtrabackup
tool_command = --user=root --password=... --backup -S /tmp/mysql.sock --target-dir=/backup/inc1 --incremental-basedir=/backup/fullbackup
tool_version = 2.4.12
ibbackup_version = 2.4.12
server_version = 5.6.39
start_time = 2018-09-14 06:49:30
end_time = 2018-09-14 06:49:32
lock_time = 0
binlog_pos =
innodb_from_lsn = 1626162
innodb_to_lsn = 1626162
partial = N
incremental = Y
format = file
compact = N
compressed = N
encrypted = N
- xtrabackup_checkpoints
备份类型(如完全或增量)和LSN(日志序列号)范围信息
[root@localhost fullback]# cat xtrabackup_checkpoints
backup_type = full-prepared #表示类型为全备
from_lsn = 0
to_lsn = 1625997
last_lsn = 1625997
compact = 0
recover_binlog_info = 0