上一篇介绍了逻辑备份工具mysqldump,本文将通过应用更为普遍的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容。

1.  xtrabackup 工具的安装

1.1  安装依赖包

/*  xtrabackup 的使用需要安装相关的依赖包 否则使用过程中会报相关错误 */
yum install -y rsync perl l perl-Digest-MD5 perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

1.2  下载及安装

去percona官网下载对应版本的安装包 https://www.percona.com/downloads  , 因为每个版本对应的数据库版本不同,因此需要根据数据库的版本选择对应的xtrabackup的安装包.

当前测试使用的数据库为MySQL5.7  因此下载2.4版本https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

另外,2.4.10及以后版本中,对libgcrypt进行了区分,因此也需要查询自己服务器的libgcrypt版本,然后选择对应的安装包

查看libgcrypt方法:

[root@testdb ~]# yum list installed|grep libgcrypt
libgcrypt.x86_64 1.5.-.el7 @anaconda

然后下载对应包

/* 二进制包 */
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/tarball/percona-xtrabackup-2.4.18-Linux-x86_64.libgcrypt153.tar.gz
/* rpm包 */
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar

二进制包解压后即可使用,rpm包下载解压后 rpm  -ivh 安装即可。操作均很简单,此处略过

xtrabackup通常使用 innobackupex命令, 可以使用 innobackupex  --help 命令查看参数及说明。

其中常用参数及说明如下:

--defaults-file                 待备份mysql实例的配置文件
--user=USER 备份用户,默认为当前系统用户,建议使用备份专用账号
--password=PASSWD 备份用户密码
--port=PORT 数据库端口,默认3306
--host=HOST 需备份数据库的IP
--apply-log 前滚、回滚日志,恢复前用
--database 指定需要备份的数据库,多个数据库之间以空格分开
--copy-back 将备份数据复制到目标路径
--incremental 增量备份,后面接的参数值为指定的增量备份的路径
--incremental-basedir=DIRECTORY 增量备份时使用指向上一次的增量备份所在的目录
--incremental-dir=DIRECTORY 增量备份还原的时候用来合并增量备份到全量,用来指定全备路径
--redo-only 对增量备份进行合并
--rsync 加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用
--no-timestamp 生成的备份文件不以时间戳为目录

1.3 创建备份账号

备份的账号建议单独创建,并授予相关权限

mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'Backup@123.com';
mysql> GRANT SUPER,RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
mysql> FLUSH PRIVILEGES;

2.  全量备份

2.1   本地全量备份,不压缩

后续会以此为基础进行增量备份

/* 创建备份结果的目录, 此步骤也可以省略 */
mkdir all_backup /* 开始全量备份 */ /root/xtrabackup/bin/innobackupex --defaults-file=/app/data/mysql3306/etc/my.cnf --socket=/app/data/mysql3306/tmp/mysql.sock --port= --user=backup --password='Backup@123.com' --no-timestamp all_backup

备份的结果存放在指定的目录 all_backup里,内容如下:

注: 如果没有添加阻塞DDL操作的参数,备份过程中如有DDL操作,备份将终止。因此建议日常备份放在从库中进行。

2.2  本地tar方式压缩备份

有时为了考虑磁盘空间问题,会在备份的时候直接压缩用以节约磁盘空间或解决磁盘空间不足以存放全量非压缩文件的问题。

/* gzip方式压缩 */
/root/xtrabackup/bin/innobackupex --defaults-file=/app/data/mysql3306/etc/my.cnf --socket=/tmp/mysql.sock --port= --user=backup --password='Backup@123.com' --stream=tar /tmp |gzip >all_backup.tar.gz

中间过程省略

备份后的结果是一个压缩文件,经过对比,压缩后数据约为非压缩情况下的20%,压缩比还是比较高的。

不过,压缩备份的方式速度相对较慢,且消耗CPU,该影响因素需要大家考虑到,视情况选择是否压缩。

注意: 如果有单表过大 而/tmp路径空间不足的情况备份过程中可能会报错,因此可以指定其他空间较大的目录

2.3  本地xbstream方式压缩备份

gzip的压缩方式备份可能会有bug(案例可以自行寻找),出现如下错误:

xtrabackup: error: The transaction log file is corrupted.
xtrabackup: error: The log was not applied to the intended LSN!

因此可以采用xbstream方式进行备份,备份命令如下:

/root/xtrabackup/bin/innobackupex  --defaults-file=/app/data/mysql3306/etc/my.cnf     --socket=/tmp/mysql.sock  --port= --user=backup --password='Backup@123.com'  /app/backup  --tmpdir=/app/backup --stream=xbstream|gzip  - > all_backup.xbstream.gz

xbstream压缩备份的过程和tar一致,就不再解释了。

2.4  远程备份到其他机器

远程备份与本地备份的相比 需要额外的配置远程主机的免密登录权限

/*  在备份所在用户的主机下配置连接目标主机的免密 */
ssh-keygen
ssh-copy-id -i user@'target_ip'

之后就可以将类似于本地备份的模式 将备份结果发送到远程机器

/root/xtrabackup/bin/innobackupex  --defaults-file=/app/data/mysql3306/etc/my.cnf     --socket=/tmp/mysql.sock  --port= --user=backup --password='Backup@123.com' --stream=tar /tmp --no-timestamp | ssh user@'target_ip' "cat - > /app/backup/remote_backup.tar"

备份过程中可以在目标机器看到对应的备份文件,完成后如下

注:

  • 远程备份的目录需要有写入权限
  • 另外,和备份备份一样,如果存在大表或超大事务运行时不建议使用/tmp目录

3.  增量备份

3.1  第一次增量备份

可以先根据2.1的本地全备的基础上进行增量备份,首次增量备份脚本如下:

/root/xtrabackup/bin/innobackupex  --defaults-file=/app/data/mysql3306/etc/my.cnf     --socket=/tmp/mysql.sock  --port= --user=backup --password='Backup@123.com' --incremental /app/backup/  --incremental-basedir=/app/backup/all_backup

此时,备份的结果放在/app/backup目录下,由于没指定no-timestamp参数,备份的结果存在在已三期时间命名的目录下:

备份的过程和全量备份很相似,但是备份结果是不一样的

结果如下

注: 增量备份仅能应用于InnoDB或XtraDB表等事务表,对于MyISAM表而言,执行增量备份时依旧进行全量备份

3.2  第二次增量备份

第二次增量备份是在第一次增量备份的基础上进行,因此incremental-basedir参数内容指定为上一次增量备份的目录即可

/root/xtrabackup/bin/innobackupex  --defaults-file=/app/data/mysql3306/etc/my.cnf     --socket=/tmp/mysql.sock  --port= --user=backup --password='Backup@123.com' --incremental /app/backup/  --incremental-basedir=/app/backup/--25_14--

完成后生成一个新的目录

4.  恢复

4.1  基于全量备份的恢复

4.1.1 回放日志

备份后的文件不能直接用作恢复,还需要先使用apply-log 做前滚和回滚

 /root/xtrabackup/bin/innobackupex  --defaults-file=./backup-my.cnf  --apply-log  /app/backup/all_backup

注: 回放日志的时候 defaults-file 选择备份目录里的即可

4.2.2  恢复至目标实例

本次恢复至一个新实例中(如果恢复至现有的实例需要先关闭目标实例,删除数据目录及相关日志存储的目录。不建议直接恢复至现有实例 ,除非实际需要)

/*  创建新实例的相关目录 */
mkdir -p /app/data/mysql3307/{data,logs,tmp,etc} /* 生产配置文件 ,本次直接拷贝其他实例的配置文件 修改对应端口等*/
cp /app/data/mysql3306/etc/my.cnf /app/data/mysql3307/etc/ sed -i "s#3306#3307#g" my.cnf /* 创建错误日志 */
touch /app/data/mysql3307/logs/mysqld.log

然后拷贝至新实例中

/root/xtrabackup/bin/innobackupex  --defaults-file=/app/data/mysql3307/etc/my.cnf --copy-back  /app/backup/all_backup

修改目标实例相关目录的权限

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

启动新实例即可

/usr/local/mysql5./bin/mysqld_safe  --defaults-file=/app/data/mysql3307/etc/my.cnf  &

恢复完毕

4.2  基于增量备份的恢复

如果是基于第一次增量备份的恢复,操作如下

/* 使用合并增量备份的方式进行回放日志,先进行全量备份的合并 */
/root/xtrabackup/bin/innobackupex --apply-log --redo-only /app/backup/all_backup
/* 再合并第一次增量备份 */
/root/xtrabackup/bin/innobackupex --apply-log --redo-only /app/backup/all_backup --incremental-dir=/app/backup/--25_14--

如果基于多次增量备份的恢复,则在全量备份及第一次增量备份的基础上继续合并后续的备份即可

/*  基于第二次增量备份的合并 */
/root/xtrabackup/bin/innobackupex --apply-log --redo-only /app/backup/all_backup --incremental-dir=/app/backup/--25_15--

之后的操作和全量备份的恢复一样即可。

5. 小结

基于xtrabackup2.4版本备份MySQL5.7数据库的主要方法及过程常用情况均已演示,结尾处再总结一下xtrabackup的主要优点:

  • 物理备份,备份速度快
  • 热备份、无需停机
  • 恢复速度快
  • 自动会对备份文件进行验证

本文只介绍了常用操作,还是有很多情况未做介绍,比如rds上的数据备份及还原等,请各位小伙伴自行探索,也可以与我讨论。

MySQL数据备份与恢复(二) -- xtrabackup工具的更多相关文章

  1. Mysql 数据备份与恢复,用户创建,授权

    Mysql 数据备份与恢复,用户创建,授权 1. Mysqldump >outfile.sql 2. Mysql –uxxx –pxxx < backfile.sql 3. Create  ...

  2. 推荐一个同步Mysql数据到Elasticsearch的工具

    把Mysql的数据同步到Elasticsearch是个很常见的需求,但在Github里找到的同步工具用起来或多或少都有些别扭. 例如:某记录内容为"aaa|bbb|ccc",将其按 ...

  3. mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)

    一.概述 物理备份和恢复又分为冷备份和热备份.与逻辑备份相比,它最大优点是备份和恢复的速度更快.因为物理备份的原理都是基于文件的cp. 1.1 冷备份 冷备份就是停掉数据库服务.这种物理备份一般很少使 ...

  4. MySQL数据库备份之xtrabackup工具使用

    一.Xtrabackup备份介绍及原理 二.Xtrabackup的安装 1.在centos7上基于yum源安装percona-xtrabackup软件 [root@node7 ~]# yum -y i ...

  5. MySQL运维之--xtrabackup工具的原理和使用方法

    Xtrabackup工具的介绍 xtrabackup是percona公司开发的一款自由.免费.开源的一款备份工具,他的备份特点就是:支持热备.备份速度快. xtrabackup包含两个重要的工具:in ...

  6. mysql数据备份之 xtrabackup

    上一篇简单介绍了一下mysqldump进行数据库的备份和恢复,这一篇说一下另一种备份工具xtrabackup,在InnoDB事务引擎泛滥的时代,xtrabackup可以很好的支持数据库的热备份,这就很 ...

  7. Mysql—数据备份与恢复

    数据备份 # 备份单个数据库 [root@localhost ~]# mysqldump -h主机名 -u用户名 -p密码 数据库名字 > 备份的数据库名字.sql [root@localhos ...

  8. Mysql数据备份与恢复命令

    转载:原文地址 一.备份常用操作基本命令 1.备份命令mysqldump格式 格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sq ...

  9. MySql数据备份与恢复小结

    方法1 备份 .sql" FROM 表名; 恢复 .sql" INTO TABLE 表名; 补充几个设置 1. FIELDS TERMINATED BY ',' #字段间隔符2. ...

随机推荐

  1. Python---14面向对象高级编程(__slots__&@property)

    一.使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Stude ...

  2. Tp5安全篇入门

    输入安全 设置public目录为唯一对外访问目录,不能把资源文件放入到应用目录: 使用框架提供的请求变量获取方法(Request类的param方法及input助手函数)而不是原生系统变量获取用户输入的 ...

  3. 修改android项目sdk版本

    1.右键单击项目--->properties---->Resource----->Android在Project Bulid Target对话框中选择你需要的Android版本.2. ...

  4. Spring-cloud微服务实战【十】:消息总线Bus

      回忆一下,在上一篇文章中,我们使用了分布式配置中心config来管理所有微服务的配置文件,那这样有没有什么问题?有,那就是无法配置文件无法自动更新,当我的git服务器上的配置文件更新后,不能同步更 ...

  5. 关于jQuery事件绑定放在head中没有响应的问题

    1.问题代码如下 <html lang="en<head> <meta charset="UTF-8"> <title>Titl ...

  6. Day 1 模拟

    1. P1088 火星人 利用STL中的next_permutation();函数求一种排列的下一种排列,循环m次即为答案.(STL大法好~~C++是世界上最好的语言~~逃 #include < ...

  7. 一步步打造自己的纯CSS单标签图标库

    图标作为网页设计中的一部分,其在凸显网页重要元素特性,视觉交互.引导以及网页装饰等充当的角色作用举足轻重.由于图标普遍具有尺寸小的特点,在项目实践时不宜将每个图标作为单个图片元素进行加载,这会增加Ht ...

  8. Python基础--动态传参

    形参的顺序: 位置 *arg     默认值  **args  ps:可以随便搭配,但是*和**以及默认值的位置顺序不能变 *,** 形参:聚合 位置参数* >>元祖 关键字** > ...

  9. Python 绘图 - Bokeh 柱状图小试(Stacked Bar)

    背景 在 Bokeh 初探之后,学习使用它来做个图 目标 做一个柱状图,支持多个 y 数据源,即有堆叠效果的柱状图 stacked bar 实现 单数据源 简单的柱状图 参考 Handling Cat ...

  10. .NET微服务从0到1:服务注册与发现(Consul)

    目录 Consul搭建 基于Docker搭建Consul 基于Windows搭建Consul ServiceA集成Consul做服务注册 Ocelot集成Consul做服务发现 更多参考 Consul ...