阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Percona XtraBackup 关于 MySQL备份还原的详细测试

146次阅读
没有评论

共计 5513 个字符,预计需要花费 14 分钟才能阅读完成。

一. Percona XtraBackup 的优点。

(1)无需停止数据库进行 InnoDB 热备;

(2)增量备份 MySQL;

(3)流压缩传输到其它服务器;

(4)在线移动表;

(5)能够比较容易地创建主从同步;

(6)备份 MySQL 时不会增大服务器负载。

 二. Percona XtraBackup 工具集组成

在旧版本中,Percona XtraBackup 工具集里主要包含两个程序:innobackupex 和 xtrabackup。

xtrabackup 是 C /C++ 编译的二进制程序,用来备份 InnoDB 的,并不能备份非 InnoDB 表,它在内部实现了对 InnoDB 的热备份。

innobackupex 由 perl 脚本编写,是对 xtrabackup 的封装,通过调用 xtrabackup 命令来备份 InnoDB 表,通过调用 mysqldump 等命令来实现对非 InnoDB 表的备份,并且会和 MySQL 数据库发送命令交互,例如获取 Binlog 位点、添加锁操作。

因为我们公司,大量使用 innodbbackupex 备份还原,所以,本文的讲解测试仍是以 innodbbackupex 为主。

 三. innodbbackupex 常用的参数选项

参数选项 作用描述 备注
–host 指定数据库实例的 IP 地址。 备份阶段
–port 连接数据库实例的端口号。 备份阶段
–user 备份时连接数据库实例 / 数据库的用户名。 备份阶段
–password 连接所用账号的密码。 备份阶段
–copy-back 将准备好的备份文件从备份目录复制到原始位置,其原始位置目录必须为空,否则报错(除非指定 –force-non-empty-directories 选项)。 恢复阶段
–incremental 该选项表示创建增量备份,而不是全量备份。 备份阶段
–incremental-basedir 该选项接受一个字符串参数,表示包含作为增量备份基本数据集的完整备份的目录。与 –incremental 一起使用。 备份阶段
–incremental-dir 该选项接受一个字符串参数,表示增量备份与完整备份的目录,以进行新的完整备份。与 –incremental 一起使用。 备份阶段
–redo-only 在 prepare 阶段,完整备份合并除最后一个增量之外的所有增量时,使用该选项。迫使 innobackupex 跳过“回滚”阶段,只做一次“重做”。如果已经在全量备份上重放了提交的事务并回滚了未提交的事务,则无法在此备份上添加增量。同样,如果在增量备份上执行,则无法添加其余的增量备份。 Prepare 阶段
–incremental-lsn 增量备份是基于 LSN 来完成的,所以,增量备份也可以指定 LSN 值进行。 备份阶段
–apply-log 在创建备份后,备份数据其实处于不可用状态。因为在 redo log 中可能存在未提交的事务和已提交的事务,需要通过准备阶段来使备份数据达到一致状态。通过此阶段,备份数据就可以用来恢复了。在准备阶段,需要指定的参数选项就包含 apply-log。  
–socket 该选项表示 mysql.sock 所在位置,以便备份进程登录 mysql。在 MySQL 多实例场景下,需指明。  
     

 四. 安装

这个版本是 Percona XtraBackup 2.4 版本。

Step 1:下载执行文件

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/RedHat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar

step 2:解压执行文件

tar -xvf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar

step 3:安装

yum install percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm –y

step 4 安装验证

查看 可执行文件

which xtrabackup

版本检查

xtrabackup --version

 五. 全量备份与全量恢复 

Step 1 环境介绍及准备 

  测试环境 :在一台服务器上开启 2 个实例,一个是 3306,另一个是 3307. 测试的基本步骤是将 3306 实例上的数据库备份、然后还原到 3306 实例中。

用来测试的数据库为 Test_Xtrabackup

Percona XtraBackup 关于 MySQL 备份还原的详细测试

step 2 全量备份

innobackupex  --port 3306  --socket /tmp/mysql_3306.sock --user=root --password= 输入自己的密码 /data/backup/full

因为测试方便使用了 root 账号,进而不可以输入对应 –host 参数。

因为测试服务器上,安装了多实例,所以输入了 –socket 参数。

生成的全量备份文件会存储在一个以备份时间命名的子目录下。

Percona XtraBackup 关于 MySQL 备份还原的详细测试

 step 3 Prepare 阶段

在创建备份后,备份数据其实处于不可用状态。因为在 redo log 中可能存在未提交的事务和已经提交的事务,需要通过准备阶段来使备份数据达到一致的状态。通过此阶段,备份数据就可以用来恢复了。

在准备阶段,需要指定选项 –apply-log 和备份文档路径。

innobackupex --apply-log /data/backup/full/2019-04-19_10-56-22

step 4 还原环境的准备

我们打算将数据库还原到同一台服务器上的 3307 端口的 mysql 实例中。

先登入看下。

Percona XtraBackup 关于 MySQL 备份还原的详细测试

测试需要 关闭 3307 实例

Percona XtraBackup 关于 MySQL 备份还原的详细测试

将实例对应的数据文档清空(/data/mysql3307/data)

Percona XtraBackup 关于 MySQL 备份还原的详细测试

step 5 恢复阶段

在 Prepare 阶段过后,如果需要用备份数据来恢复数据库,则只需要指定 –copy-back 和备份数据所在目录即可。

innobackupex --datadir=/data/mysql3307/data  --copy-back  /data/backup/full/2019-04-19_10-56-22

innobackupex 将所有的数据相关文件复制到服务器中的 datadir 目录,该目录有 my.cnf 文件中的 datadir 选项指定。因为是多实例,在此直接指定。

step 6 修改文件的所有权

复制完成后,文件属性不会改变。在大多数的情况下,在启动 MySQL 数据库之前,需要修改文件的所有权。

chown -R mysql:mysql /data/mysql3307/data

step 7 开启恢复后的实例,数据验证

Percona XtraBackup 关于 MySQL 备份还原的详细测试

以上截图说明 3306 上的数据已恢复至 3307 实例上。

 六. 增量备份与恢复的测试

1. 备份阶段

环境准备,在完整备份前,创建了一个 表 T_full_table; 并向此表插入了一笔数据,如下图所示:

Percona XtraBackup 关于 MySQL 备份还原的详细测试

 增量备份基于全量备份,所以需要创建一个全量备份。全量备份的命令如下:

innobackupex  --port 3306  --socket /tmp/mysql_3306.sock --user=root --password= 你的密码 /data/backup/full

全量备份后生成的(时间子)目录为 2019-04-19_21-28-32,这个目录会在第一次增量备份是用到,incremental-basedir 选项参数需要细化到这一层,否则报错。意思是找不到 xtrabackup_checkpoints 文件。

 全量备份后,向表中 insert  2 笔 数据,如下:

Percona XtraBackup 关于 MySQL 备份还原的详细测试

第一个增量备份

innobackupex  --port 3306  --socket /tmp/mysql_3306.sock --user=root --password= 你的密码  --incremental --incremental-basedir=/data/backup/full/2019-04-19_21-28-32 /data/backup/incremental

 增量备份产生的目录文件为  /data/backup/incremental/2019-04-19_21-30-11

第一次增量备份后,继续 insert 2 笔数据

Percona XtraBackup 关于 MySQL 备份还原的详细测试

第二个增量备份(我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把 –incremental-basedir 设置为上一次增量备份的目录即可。即:增量备份可以基于以前的增量备份完成数据备份。)

innobackupex  --port 3306  --socket /tmp/mysql_3306.sock --user=root --password= 你的密码  --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-30-11 /data/backup/incremental

第二次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-35-33

再次插入 2 笔数据,用来验证第三次增量备份

Percona XtraBackup 关于 MySQL 备份还原的详细测试

第三个增量备份

innobackupex  --port 3306  --socket /tmp/mysql_3306.sock --user=root --password= 你的密码  --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-35-33 /data/backup/incremental

第三次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-38-16

再次插入 2 笔验证数据,用来验证第四次增量备份。

Percona XtraBackup 关于 MySQL 备份还原的详细测试

生成第四个增量备份

innobackupex  --port 3306  --socket /tmp/mysql_3306.sock --user=root --password= 你的密码  --incremental --incremental-basedir=/data/backup/incremental/2019-04-19_21-38-16 /data/backup/incremental

第四次增量备份产生的目录文件为 /data/backup/incremental/2019-04-19_21-40-02

最后一次插入 2 笔验证数据

Percona XtraBackup 关于 MySQL 备份还原的详细测试

我们希望还原后的数据库是 刚刚作为第三次完整增量备份的数据库状态。

(此时 T_full_table 表的数据,应该为 1(全量),2,3(一增),21,22(二赠),31,32(三赠))

 2. 增量恢复的 Prepare 阶段

 1)在全量备份上执行

innobackupex --apply-log --redo-only /data/backup/full/2019-04-19_21-28-32

 2 在第一个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-30-11,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)

innobackupex --apply-log --redo-only --incremental-dir=/data/backup/incremental/2019-04-19_21-30-11 /data/backup/full/2019-04-19_21-28-32

 3)在第二个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-35-33,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)

innobackupex --apply-log --redo-only --incremental-dir=/data/backup/incremental/2019-04-19_21-35-33 /data/backup/full/2019-04-19_21-28-32

4)在第二个增量备份上执行 (增量备份产生的子目录是 2019-04-19_21-38-16,前面完整备份的目录是 /data/backup/full/2019-04-19_21-28-32)

innobackupex --apply-log --incremental-dir=/data/backup/incremental/2019-04-19_21-38-16 /data/backup/full/2019-04-19_21-28-32

3. 增量备份的恢复阶段

通过 prepare 阶段,base 目录包含了所有数据。在恢复时,只需要通过以下操作即可。

innobackupex --datadir=/data/mysql3307/data  --copy-back  /data/backup/full/2019-04-19_21-28-32

在数据库实例启动前,需要修改文件的所有权,执行指令如下

chown -R mysql:mysql /data/mysql3307/data

4. 开启实例,进行验证

Percona XtraBackup 关于 MySQL 备份还原的详细测试

 恢复后的数据,正是我们想要的数据,测试到达了预期效果。

注:

现在 xtrabackup 版本升级到了 2.4,相比之前的 2.1 有了比较大的变化:innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary,另外为了使用上的兼容考虑,innobackupex 作为 xtrabackup 的一个软链,即 xtrabackup 现在支持非 Innodb 表备份,并且 Innobackupex 在下一版本中移除,建议通过 xtrabackup 替换 innobackupex。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计5513字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中