赞
踩
上节介绍的MEB工具不仅功能强大、性能佳,而且适用场景也非常广泛。但是,MEB是企业级软件,这就意味着其需要付费才能使用。对于活跃于开源社区的用户而言,单为使用MEB付费可能有点令人难以接受。那市面上是否存在可以媲美或功能接近MEB的开源软件呢?本节将对标MEB,重点介绍作为开源解决方案的PXB,为大家提供更多选择。
PXB软件介绍
PXB概述
PXB(Percona Xtrabackup)是一款开源的备份工具,其支持InnoDB、MyISAM、XtraDB等存储引擎数据的在线热备。其特点是备份速度快,对InnoDB型业务数据几乎没有任何影响,对MyISAM型数据会暂时性锁表。通常,PXB软件部署包含三种常见方式,分别是RPM包、二进制包及源码编译安装等。PXB可提供在系统运行时执行的MySQL数据热备份的方法。它是一个免费的、在线的、开源的、完整的数据库备份解决方案,适用于MySQL所有版本的服务器。无论是7×24小时高负载的服务器,还是低事务量的环境,PXB都旨在使备份成为无缝的过程,并且基本上不会影响生产环境中服务器的性能。
PXB支持MySQL、MariaDB和Percona等数据库。PXB可以在备份结束时通过短暂的暂停写来备份以下存储引擎MyISAM、Merge和Archive,但不支持MyRocks或TokuDB存储引擎。由于MySQL 8.0在数据字典、重做日志和撤消日志中引入的更改与之前的版本不兼容,因此Percona XtraBackup 8.0目前还不能支持8.0之前的版本。因此,本节笔者将重点介绍PXB 8.0的前一个版本Percona XtraBackup 2.4.18。它既可以在MySQL 5.1、5.5、5.6和5.7服务器上备份InnoDB、XtraDB和MyISAM表中的数据,也可以在Percona服务器上备份XtraDB。
注意:innobackupex工具已经过期,Percona XtraBackup 2.4.18版本保留此程序主要是为了向下兼容,并在将来的版本中弃用,请使用XtraBackup工具执行数据的备份与恢复任务。
下载PXB介质包并安装
Percona Xtrabackup是Percona旗下的一款开源软件,直接登录Percona官网即可下载,下载界面如图6-2所示。
PXB备份工具的安装需要用到很多依赖包,其中,OS介质中默认不包含libev包,需要从开源RPM网站下载并安装。具体请在rpmfind.net的RPM资料库中找到Linux 7上额外的依赖包libev,点击下载并安装。参考链接:http://rpmfind.net/linux/rpm2html/search.php。
shell> yum install -y perl-Digest-MD5 perl-DBD-MySQL rsync
shell> rpm -ivh libev-4.15-3.el7.x86_64.rpm
shell> rpm -ivh percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm
创建PXB备份账户
PXB需要能够连接到MySQL并在服务器上执行操作。无论是使用XtraBackup还是InnoBackupex,都涉及两个参与者:操作系统账户和数据库账户。注意,即便操作系统账户和数据库账户可能拥有相同的用户名,它们也是不同层面的不同用户。XtraBackup的“--user”和“--password”选项可用于指定连接到MySQL服务器的数据库用户及其密码。对于复杂场景,必须指定正确的连接参数,以便XtraBackup与正确的MySQL实例进行通信。为了能够正常执行备份,还需要检查MySQL数据目录的读取和执行权限。
创建完整备份所需的最低的数据库账户权限示例代码如下:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
PXB工作原理概述
首先,我们需要了解PXB的工作原理。PXB大致可以分为三个阶段,分别是备份(backup)、准备(prepare)和恢复(copy-backup)。
1.备份阶段
PXB的备份与恢复功能主要是基于InnoDB的崩溃恢复功能。它会复制InnoDB数据文件,而这又会导致数据内部不一致的问题;然后,它会对文件执行崩溃恢复,使它们再次成为一致的、可用的数据库。InnoDB维护了一个重做日志,也称为事务日志。它记录了对InnoDB数据的每次更改。启动InnoDB时,它会检查数据文件和事务日志,并将提交的事务日志条目应用于数据文件,并对所有修改了数据但没有提交的事务执行撤消操作。
PXB在启动时会标记InnoDB日志序列号(LSN),然后复制数据文件。这个过程需要一些时间,因此如果文件正在进行更改,那么日志序列号将反映数据库处于不同时间点的状态。同时,PXB运行一个后台进程,该进程可用于监视事务日志文件,并从其中复制更改信息,并且需要不断地这样做。因为事务日志是以循环的方式编写的,并且可以在一段时间后重用PXB需要的事务日志记录,以记录自开始执行以来每次对数据文件所做的更改。
只有当PXB备份完所有InnoDB或XtraDB数据和日志后,才会对MyISAM和其他非InnoDB表进行锁定。PXB将在可用的地方使用备份锁,作为使用读锁刷新表的轻量级替代。PXB可以使用它来自动复制非InnoDB数据,以避免阻塞修改InnoDB表的DML查询。当服务器支持备份锁时,XtraBackup将首先复制InnoDB数据,运行用于备份的锁表,然后再复制MyISAM表和以“.frm”为后缀的文件。
接下来备份以.frm、.MRG、.MYD、.MYI、.TRG、.TRN、.ARM、.ARZ、.CSM、.CSV、.par和.opt为后缀的文件等。之后,XtraBackup将使用LOCK BINLOG进行备份,以阻止显示主或从状态报告的所有可能更改二进制日志的位置或Exec_Master_Log_Pos或Exec_Gtid_Set的操作。然后,XtraBackup将完成重做日志文件的复制,并获取二进制日志坐标。完成后,XtraBackup将解锁二进制日志和表。最后,二进制日志位置将打印为STDERR,如果一切正常,XtraBackup将退出并返回0。注意,XtraBackup的STDERR并不是可以写在任何文件中的。必须把它重定向到一个文件,例如,XtraBackup OPTIONS 2> backupout.log。
2.准备阶段
在准备阶段,PXB使用复制的事务日志文件对复制的数据文件执行崩溃恢复。完成此操作后,数据库就可以恢复和使用了。备份后的MyISAM和InnoDB表最终将保持一致,因为在准备过程之后,InnoDB的数据将前滚到备份完成的地方,而不是回滚到备份开始的地方。这个时间点与使用读锁刷新表相匹配,因此MyISAM数据和准备好的InnoDB数据是同步的。XtraBackup工具允许通过复制数据文件、复制日志文件和将日志应用于数据的各种组合来执行流备份和增量备份等操作。
3.恢复阶段
PXB的“--copy-back”或“--move-back”选项可用于XtraBackup恢复备份。XtraBackup读取my.cnf中的datadir、innodb_data_home_dir、innodb_data_file_path和innodb_log_group_home_dir,并检查是否存在目录。它首先会复制MyISAM表、索引等文件,然后是InnoDB表和索引,最后是日志文件。这些文件在复制时,将保留文件的属性,在启动实例之前,必须将文件的所有权更改为mysql,因为它们将由创建备份的用户所拥有。或者也可以使用XtraBackup的“--move-back”选项来恢复备份。这个选项类似于XtraBackup的“--copy-back”,唯一的区别是前者是将文件移动到目标位置,而不是复制文件。由于此选项会删除备份文件,因此必须谨慎使用。当没有足够的空闲磁盘空间来保存数据文件及其备份副本时,“--move-back”选项就会非常有用。
PXB备份与恢复示例
全局备份与恢复
(1)PXB全局备份
使用XtraBackup创建全量备份时,需要指定“--backup”选项来运行。不仅如此,还要通过“--target-dir”选项来指定备份数据的存储位置。如果目标目录不存在,则XtraBackup将会自动创建目标目录;如果目录确实存在且为空,则程序正常执行。同时,XtraBackup不会覆盖现有的文件。若检测到备份目录已存在文件,则程序执行中断并抛出错误代码17,提示文件已存在。在备份过程中,我们可以看到大量复制数据文件操作的输出,以及日志线程反复扫描日志文件并从中复制。备份的时间会受到数据库规模的影响,数据量越大,所用的时间就会越长。但是,在任何时候取消都是安全的,因为程序不会修改数据库。
创建备份目录并执行全量备份,命令如下:
shell> mkdir -p /backups/data/base
shell> xtrabackup -uroot -p --socket=/mysql/product/scene1/data/mysql.sock \
--backup \
--target-dir=/backups/data/base
...
xtrabackup: Transaction log of lsn (924475981) to (934476055) was copied.
200205 22:49:09 completed OK!
注意:该全量备份数据将存储在/backups/data中。如果指定了相对路径&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。