一、Percona Xtrabackup概述
Percona XtraBackup是世界上唯一一款开源的免费MySQL热备份软件,可以为InnoDB和XtraDB数据库执行非阻塞备份。
使用Percona XtraBackup,您可以获得以下好处:
快速可靠地完成备份
备份期间不间断的事务处理
节省磁盘空间和网络带宽
自动备份验证
由于恢复时间更快,正常运行时间更长
Percona XtraBackup对所有版本的Percona Server for MySQL和MySQL进行MySQL热备份。它执行流式、压缩和增量MySQL备份。
注意:
随着Percona XtraBackup 8.0的推出,Percona XtraBackup 2.4将继续支持MySQL和Percona Server 5.6和5.7数据库。由于新的MySQL重做日志和数据字典格式,Percona XtraBackup 8.0.x版本将只与MySQL8.0.x和即将推出的用于MySQL8.0.x的Percona服务器兼容
1、支持的存储引擎
Percona XtraBackup可以与MySQL和Percona Server for MySQL协同工作。它支持InnoDB、XtraDB和MyRocks存储引擎的完全无阻塞备份。此外,它还可以通过在备份结束时短暂暂停写入操作来备份以下存储引擎:MyISAM、Merge和Archive,包括分区表、触发器和数据库选项。
注意:
MyRocks存储引擎的支持在版本8.0.6中添加。
Percona XtraBackup 8.0不支持TokuDB存储引擎。
2、MySQL备份工具特性比较
Features | Percona XtraBackup | MySQL Enterprise backup |
---|---|---|
License | GPL | Proprietary |
Price | Free | Included in subscription at $5000 per Server |
Streaming and encryption formats | Open source | Proprietary |
Supported MySQL flavors | MySQL, Percona Server for MySQL, Percona XtraDB Cluster, | MySQL |
Supported operating systems | Linux | Linux, Solaris, Windows, OSX, FreeBSD. |
Non-blocking InnoDB backups [1] | Yes | Yes |
Blocking MyISAM backups | Yes | Yes |
Incremental backups | Yes | Yes |
Full compressed backups | Yes | Yes |
Incremental compressed backups | Yes | |
Fast incremental backups [2] | Yes | |
Incremental backups with archived logs feature in Percona Server | Yes | |
Incremental backups with REDO log only | Yes | |
Backup locks [7] | Yes (LOCK TABLE FOR BACKUP ) |
Yes (LOCK INSTANCE FOR BACKUP ) |
Encrypted backups(加密备份) | Yes | Yes [3] |
Streaming backups | Yes | Yes |
Parallel local backups | Yes | Yes |
Parallel compression | Yes | Yes |
Parallel encryption | Yes | Yes |
Parallel apply-log | Yes | |
Parallel copy-back | Yes | |
Partial backups | Yes | Yes |
Partial backups of individual partitions | Yes | |
Throttling [4](限流) | Yes | Yes |
Backup image validation(备份映像验证) | Yes | |
Point-in-time recovery support | Yes | Yes |
Safe slave backups | Yes | |
Compact backups [5] | Yes | |
Buffer pool state backups | Yes | |
Individual tables export(个别表导出) | Yes | Yes [6] |
Individual partitions export | Yes | |
Restoring tables to a different server | Yes | Yes |
Data & index file statistics | Yes | |
InnoDB secondary indexes defragmentation(InnoDB二级索引碎片整理) | Yes | |
rsync support to minimize lock time(支持最小化锁定时间) |
Yes | |
Improved FTWRL handling |
Yes | |
Backup history table | Yes | Yes |
Backup progress table | Yes | |
Offline backups | Yes | |
Backup to tape media managers(备份到磁带介质管理器) | Yes | |
Cloud backups support | Amazon S3 | |
External graphical user interfaces to backup/recovery(用于备份/恢复的外部图形用户界面) | Zmanda Recovery Manager for MySQL | MySQL Workbench, MySQL Enterprise Monitor |
[1]复制非InnoDB数据时,InnoDB表仍然被锁定。
[2]Percona Server for MySQL支持快速增量备份,支持XtraDB更改页面跟踪。
[3]Percona XtraBackup支持对任何备份进行加密。MySQL企业备份只支持对单个文件备份进行加密。
[4]Percona XtraBackup根据每秒IO操作数执行限制。MySQL企业备份支持操作之间的可配置睡眠时间。
[5]Percona XtraBackup跳过辅助索引页,并在准备压缩备份时重新创建它们。MySQL Enterprise Backup跳过未使用的页并重新插入到准备阶段。
[6]Percona XtraBackup甚至可以从完整备份中导出单个表,无论InnoDB版本如何。MySQL Enterprise Backup仅在执行部分备份时使用InnoDB 5.6可移植表空间。
[7]备份锁是用Percona Server for MySQL中的读锁刷新表的轻量级替代方法。Percona XtraBackup使用它们自动复制非InnoDB数据,以避免阻塞修改InnoDB表的DML查询。
3、Percona XtraBackup有什么特点?
在不暂停数据库的情况下创建热的InnoDB备份
对MySQL进行增量备份
将压缩的MySQL备份流式传输到另一台服务器
在MySQL服务器之间在线移动表
轻松创建新的MySQL复制从属服务器
在不向服务器添加负载的情况下备份MySQL
二、Percona XtraBackup备份工作原理
1、Percona XtraBackup备份工作原理
Percona XtraBackup基于InnoDB的崩溃恢复功能。它复制您的InnoDB数据文件,这会导致数据在内部不一致;但随后它会对这些文件执行崩溃恢复,使它们再次成为一致的、可用的数据库。
这是因为InnoDB维护一个重做日志,也称为事务日志。它包含对InnoDB数据的每次更改的记录。当InnoDB启动时,它检查数据文件和事务日志,并执行两个步骤。它将提交的事务日志条目应用于数据文件,并对修改数据但未提交的任何事务执行撤消操作。
Percona XtraBackup的工作原理是在启动时记住日志序列号(LSN),然后复制数据文件。这样做需要一些时间,因此如果文件正在更改,那么它们将反映数据库在不同时间点的状态。同时,Percona XtraBackup运行一个后台进程来监视事务日志文件,并从中复制更改。PerconaXtrabackup需要不断地这样做,因为事务日志是以循环方式编写的,并且可以在一段时间后重用。Percona XtraBackup自开始执行以来,每次对数据文件的更改都需要事务日志记录。
Percona XtraBackup使用备份锁(如果有的话)作为一种轻量级的替代方法来使用读锁刷新表。Percona Server for MySQL 5.6+中提供了此功能。MySQL 8.0允许通过lock instance FOR backup语句获取实例级备份锁。
只有在Percona XtraBackup完成对所有InnoDB/XtraDB数据和日志的备份后,才会对MyISAM和其他非InnoDB表执行锁定。Percona XtraBackup会自动复制非InnoDB数据,避免阻塞修改InnoDB表的DML查询。
注意
为了要有效地使用LOCK INSTANCE FOR BACKUP or LOCK TABLES FOR BACKUP,需要BACKUP_ADMIN权限才能查询performance_schema.log_status。
当实例只包含InnoDB表时,xtrabackup试图避免使用备份锁并用读锁刷新表。在这种情况下,xtrabackup从performance_schema.log_status获取二进制日志坐标。使用--slave info启动xtrabackup时,MySQL 8.0中仍然需要使用FLUSH TABLES WITH READ LOCK。Percona Server for MySQL8.0中的log_status表被扩展为包含中继日志坐标,因此即使使用--slave info选项也不需要锁。
2、Percona XtraBackup备份步骤
1)当服务器支持备份锁时,xtrabackup首先复制InnoDB数据,运行LOCK TABLES FOR BACKUP
,然后复制MyISAM表。
2)完成后,将开始备份文件。它将备份.frm、.MRG、.MYD、.MYI、.ARM、.ARZ、.CSM、.CSV、.sdi和.par文件。
3)在此之后,xtrabackup将使用LOCK BINLOG FOR BACKUP
,以阻止所有可能更改二进制日志位置或Exec_Master_log_Pos或Exec_Gtid_Set(即,主二进制日志坐标对应于复制从机上的当前SQL线程状态)的操作,如SHOW Master/slave STATUS所报告的。然后,xtrabackup将完成复制重做日志文件并获取二进制日志坐标。完成后,xtrabackup将解锁二进制日志和表。
4)最后,二进制日志位置将被打印到STDERR
,如果所有操作都正常,则返回0。
请注意,xtrabackup的STDERR没有写入任何文件。您必须将其重定向到一个文件,例如xtrabackup OPTIONS 2>backupout.log。
三、Percona XtraBackup恢复工作原理
要使用xtrabackup还原备份,可以使用--copy back或--move back选项。
1、XTrabkUp将从My.CNF变量datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir读取并检查目录是否存在。
2、首先复制MyISAM表、索引等(.MRG、.MYD、.MYI、.ARM、.ARZ、.CSM、.CSV、.sdi和par文件),然后复制InnoDB表和索引,最后复制日志文件。它将在复制文件时保留文件的属性,您可能需要在启动数据库服务器之前将文件的所有权更改为mysql,因为它们将由创建备份的用户拥有。
3、或者,可以使用--move back选项恢复备份。此选项类似于--copy back,唯一的区别是它将文件移到目标位置而不是复制文件。由于此选项将删除备份文件,因此必须谨慎使用。当没有足够的可用磁盘空间来保存数据文件及其备份副本时,它非常有用。
四、Percona Xtrabackup8.0变更
Percona Xtrabackup是一个开源的热备份工具,用于基于MySQL的服务器,在备份过程中不会锁定数据库。
无论是24x7高负载的服务器还是低事务量的环境,Percona XtraBackup都旨在使备份成为一个无缝的过程,而不会中断服务器在生产环境中的性能。提供商业支持合同。
Percona XtraBackup可以备份MySQL8.0服务器上InnoDB、XtraDB、MyISAM和MyRocks表的数据,也可以备份带有XtraDB的MySQL Percona服务器、MySQL8.0的Percona服务器和Percona XtraDB集群8.0的数据。
注意:
1、MyRocks存储引擎的支持在版本8.0.6中添加。
2、Percona XtraBackup 8.0不支持TokuDB存储引擎。
3、Percona XtraBackup 8.0不支持对MySQL 8.0之前版本、Percona Server for MySQL或Percona XtraDB Cluster中创建的数据库进行备份。由于MySQL8.0在数据字典、重做日志和撤消日志中引入的更改与以前的版本不兼容,目前Percona XtraBackup 8.0不可能同时支持8.0之前的版本。
五、Redhat/CentOS 安装Percona Xtrabackup8.0
支持的版本:
CentOS 6和RHEL 6(当前稳定版本)
CentOS 7和RHEL 7
Amazon Linux AMI(与CentOS 6相同)
亚马逊Linux 2
Package | Contains |
---|---|
percona-xtrabackup-80-debuginfo |
The debug symbols for binaries in percona-xtrabackup-80 |
percona-xtrabackup-test-80 |
The test suite for Percona XtraBackup |
percona-xtrabackup |
The older version of the Percona XtraBackup |
1、安装方式一Percona yum
repository
1)以root用户身份运行以下命令或使用sudo安装Percona-yum存储库:yum Install https://repo.Percona.com/yum/Percona-release-latest.noarch.rpm
启用存储库:percona release只启用tools release
如果打算将Percona XtraBackup与上游MySQL服务器结合使用,只需启用工具库:Percona release enable only tools。
2)运行:yum Install Percona-XtraBackup-80安装Percona XtraBackup
2、安装方式二using downloaded rpm packages
$ wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.4/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm
$ yum localinstall percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm
3、卸载Percona XtraBackup
yum remove percona-xtrabackup
六、需要连接和权限
Percona XtraBackup需要能够连接到数据库服务器,在创建备份时、在某些情况下准备备份时以及在还原备份时对服务器和datadir执行操作。为此,必须满足对其执行的特权和权限要求。
权限是指允许系统用户在数据库服务器中执行的操作。它们在数据库服务器上设置,仅适用于数据库服务器中的用户。
权限是允许用户在系统上执行操作的权限,例如在某个目录上读、写或执行,或启动/停止系统服务的权限。它们设置在系统级别,仅适用于系统用户。
使用xtrabackup时,涉及两个参与者:调用程序的用户(系统用户)和在数据库服务器中执行操作的用户(数据库用户)。注意,这些用户在不同的地方是不同的,即使他们可能有相同的用户名。
本文档中对xtrabackup的所有调用都假定系统用户具有适当的权限,并且除了要执行的操作选项之外,您还提供了连接数据库服务器的相关选项,并且数据库用户具有足够的权限。
1、连接到DB Server
$ xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/
Other Connection Options
Option | Description |
---|---|
–port | The port to use when connecting to the database server with TCP/IP. |
–socket | The socket to use when connecting to the local database. |
–host | The host to use when connecting to the database server with TCP/IP. |
注意
在多个服务器实例的情况下,必须指定正确的连接参数(端口、套接字、主机),xtrabackup才能与正确的服务器通信。
2、需要的许可与权限Permissions and Privileges Needed
The database user needs the following privileges on the tables/databases to be backed up:
RELOAD
andLOCK TABLES
(unless the--no-lock
option is specified) in order to runFLUSH TABLES WITH READ LOCK
andFLUSH ENGINE LOGS
prior to start copying the files, and requires this privilege when Backup Locks are usedBACKUP_ADMIN
privilege is needed to query the performance_schema.log_status table, and runLOCK INSTANCE FOR BACKUP
,LOCK BINLOG FOR BACKUP
, orLOCK TABLES FOR BACKUP
.REPLICATION CLIENT
in order to obtain the binary log position,CREATE TABLESPACE
in order to import tables (see Restoring Individual Tables),PROCESS
in order to runSHOW ENGINE INNODB STATUS
(which is mandatory), and optionally to see all threads which are running on the server (see Handling FLUSH TABLES WITH READ LOCK),SUPER
in order to start/stop the slave threads in a replication environment, use XtraDB Changed Page Tracking for Incremental Backups and for handling FLUSH TABLES WITH READ LOCK,CREATE
privilege in order to create the PERCONA_SCHEMA.xtrabackup_history database and table,INSERT
privilege in order to add history records to the PERCONA_SCHEMA.xtrabackup_history table,SELECT
privilege in order to use--incremental-history-name
or--incremental-history-uuid
in order for the feature to look up theinnodb_to_lsn
values in the PERCONA_SCHEMA.xtrabackup_history table.
创建具有完整备份所需最低权限的数据库用户的SQL示例如下:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cr%T';
mysql> GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> GRANT SELECT ON performance_schema.log_status TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
七、配置xtrabackup
1、参数配置
所有xtrabackup配置都是通过选项完成的,这些选项的行为与标准MySQL程序选项完全相同:它们可以在命令行中指定,也可以通过/etc/my.cnf等文件指定。
xtrabackup二进制文件按此顺序从任何配置文件中读取[mysqld]和[xtrabackup]部分。这样它就可以从现有的MySQL安装中读取它的选项,比如datadir或一些InnoDB选项。如果您想覆盖它们,只需在[xtrabackup]部分中指定它们,因为它稍后会被读取,所以它将具有优先权。
如果不想,您不需要在my.cnf中设置任何配置。您只需在命令行上指定选项即可。通常,在my.cnf文件的[xtrabackup]部分中,唯一方便放置的是target dir选项,默认放置备份的目录,
例如:
[xtrabackup]
target_dir = /data/backups/mysql/
本手册假设您没有xtrabackup的任何基于文件的配置,因此它将始终显示显式使用的命令行选项。有关所有配置选项的详细信息,请参阅选项和变量参考。
xtrabackup二进制文件不接受与mysqld服务器二进制文件完全相同的语法。出于历史原因,mysqld服务器二进制文件接受具有--set variable=
2、系统配置和NFS卷
xtrabackup工具在大多数系统上不需要特殊配置。但是,当调用fsync()时,-target dir所在的存储必须正常工作。特别是,我们注意到没有使用sync选项装载的NFS卷可能不会真正同步数据。因此,如果备份到使用async选项装入的NFS卷,然后尝试从另一台也装入该卷的服务器准备备份,则数据可能已损坏。您可以使用sync mount选项来避免此问题。
八、备份周期-完全备份
1、创建备份
要创建备份,请使用--backup选项运行xtrabackup。您还需要指定--target dir选项,这是备份的存储位置,如果InnoDB数据或日志文件不是存储在同一个目录中,您可能还需要指定这些文件的位置。如果目标目录不存在,XTrabkUp创建它。如果目录确实存在并且是空的,XTrabkUp将成功。
XTrabkUp不会覆盖现有文件,操作系统错误17将失败,文件存在。
要启动备份进程,请执行以下操作:
$ xtrabackup --backup --target-dir=/data/backups/
这将在/data/backups/存储备份。如果指定相对路径,则目标目录将相对于当前目录。
在备份过程中,您应该会看到许多显示要复制的数据文件的输出,以及日志文件线程重复扫描日志文件并从中复制。下面是一个示例,其中显示了在后台扫描日志的日志线程和在ibdata1文件上工作的文件复制线程:
160906 10:19:17 Finished backing up non-InnoDB tables and files
160906 10:19:17 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): '62988944'
xtrabackup: Stopping log copying thread.
.160906 10:19:18 >> log scanned up to (137343534)
160906 10:19:18 Executing UNLOCK TABLES
160906 10:19:18 All tables unlocked
160906 10:19:18 Backup created in directory '/data/backups/'
160906 10:19:18 [00] Writing backup-my.cnf
160906 10:19:18 [00] ...done
160906 10:19:18 [00] Writing xtrabackup_info
160906 10:19:18 [00] ...done
xtrabackup: Transaction log of lsn (26970807) to (137343534) was copied.
注意
日志复制线程每秒钟检查一次事务日志,查看是否有需要复制的新日志记录写入,但有可能日志复制线程无法跟上事务日志的写入量,当日志记录在被读取之前被覆盖时,将遇到错误。
2、准备备份
在使用--backup选项进行备份之后,您需要准备它以便还原它。数据文件在准备好之前是不一致的,因为它们是在程序运行的不同时间复制的,并且在发生这种情况时可能已经被更改了。
如果您尝试用这些数据文件启动InnoDB,它将检测到损坏并停止工作,以避免在损坏的数据上运行。--prepare步骤使文件在一瞬间完全一致,因此您可以对它们运行InnoDB。
您可以在任何计算机上运行准备操作;它不需要在原始服务器或您要还原到的服务器上。您可以将备份复制到实用程序服务器并在那里进行准备。
请注意,Percona XtraBackup 8.0只能备份MySQL8.0、Percona Server for MySQL8.0和Percona XtraDB Cluster 8.0数据库。不支持8.0之前的版本。
在prepare操作中,xtrabackup启动了一种经过修改的嵌入式InnoDB(xtrabackup链接到的库)。这些修改对于禁用InnoDB标准安全检查是必要的,比如抱怨日志文件大小不对。此警告不适用于处理备份。这些修改仅适用于xtrabackup二进制文件;不需要经过修改的InnoDB就可以使用xtrabackup进行备份。
准备步骤使用这个“embedded InnoDB”使用复制的日志文件对复制的数据文件执行崩溃恢复。准备步骤使用起来非常简单:只需使用--prepare选项运行xtrabackup并告诉它准备哪个目录,例如,准备以前执行的备份运行:
$ xtrabackup --prepare --target-dir=/data/backups/
完成后,您将看到InnoDB关闭,并显示如下消息,其中LSN的值将再次取决于您的系统:
InnoDB: Shutdown completed; log sequence number 137345046
160906 11:21:01 completed OK!
All following prepares will not change the already prepared data files, you’ll see that output says:
xtrabackup: This target seems to be already prepared.
xtrabackup: notice: xtrabackup_logfile was already used to '--prepare'.
不建议在准备备份时中断xtrabackup进程,因为它可能导致数据文件损坏,备份将变得不可用。如果准备过程中断,则无法保证备份有效性。
注意
如果要将备份作为进一步增量备份的基础,则在准备备份时应使用--apply log only选项,否则将无法对其应用增量备份。有关详细信息,请参阅有关准备增量备份的文档。
3、恢复备份
为了方便起见,xtrabackup binary具有--copy back选项,可以将备份复制到服务器的datadir:
$ xtrabackup --copy-back --target-dir=/data/backups/
如果不想保存备份,可以使用--move back选项将备份的数据移动到datadir。
如果不想使用上述任何选项,还可以使用rsync或cp还原文件。
注意
还原备份之前,datadir必须为空。另外,需要注意的是,在执行还原之前需要关闭MySQL服务器。无法还原到正在运行的mysqld实例的datadir(导入部分备份时除外)。
可用于还原备份的rsync命令示例如下:
$ rsync -avrP /data/backup/ /var/lib/mysql/
由于文件的属性将被保留,在大多数情况下,您需要在启动数据库服务器之前将文件的所有权更改为mysql,因为它们将由创建备份的用户拥有:
$chown-R mysql:mysql/var/lib/mysql
数据现在已还原,您可以启动服务器。
九、