使用XtraBackup备份MySQL 8.0 Part 7 对增量备份进行恢复
实验环境
前面我们介绍了Xtrabackup 2.4版本的介绍,这个专题说8.0版本
大体上差不多,不过8.0版本移除了innobackupex命令且只能备份8.0版本的MySQL
此次实验的环境如下
- MySQL 8.0.19
- Redhat 7.4
- 操作系统账号:mysql
- 数据库备份账号:backup
1. prepare阶段
上节我们介绍了如何使用xtrabackup对数据库进行增量备份,分别为base,incr1以及incr2
结束后我们得到了非一致性的备份文件,即需要对未提交的事务进行回滚以及对提交的事务进行前滚
这个过程在xtrabackup中叫做准备阶段(prepare stage)
这个阶段完成后该备份文件就可被使用
你可以在任何机器上prepare
2. prepare 备份
通过上一节内容我们有如下备份内容
第一次全备第一次增量备份第二次增量备份我们同样使用--apply-log进行恢复动作,相当于Oracle的recover动作
我们需要依次进行prepare,即按照如下步骤进行
prepare第一次全备prepare第一次增量备份prepare第二次增量备份还有需要注意的是和prepare全备不一样,除了最后一步,我们需要加上--apply-log-only
该参数使prepare只对commit过的语句进行提交,而不是回滚未提交的语句,这样做是为了能够继续prepare
如果没有加上--apply-log-only则prepare过的数据文件为一致状态,无法继续prepare
如果内存有空闲,可使用--use-memory加快速度
2.1 prepare全备
xtrabackup使用“embedded InnoDB”来进行实例恢复
xtrabackup --prepare --apply-log-only --use-memory=1G --target-dir=/data/mysql/backup/base
结束后会出现如下提示
Shutdown completed; log sequence number 21071372
200401 15:59:13 completed OK!
这时数据文件处于非一致状态
2.2 prepare 第一次增量备份
xtrabackup --prepare --apply-log-only --use-memory=1G --target-dir=/data/mysql/backup/base --incremental-dir=/data/backups/inc1
这时已经将第一次增量备份的内容附加到了全备的数据文件上了
这时数据文件处于非一致状态
2.3 prepare 第二次增量备份
由于我们只有2个增量备份,所以这是最后一次prepare,所以不需要加--apply-log-only参数
xtrabackup --prepare -use-memory=1G --target-dir=/data/mysql/backup/base --incremental-dir=/data/backups/inc2
3. copy 数据文件
这个阶段我们使用--copy-back将prepare过的数据文件拷贝至需要还原的服务器的datadir目录
我们需要注意如下几点
- xtrabackup 读取my.cnf文件获取数据文件(datadir)位置
- datadir目录必须为空
- 命令允许用户必须对datadir目录有读写权限
- 使用datadir目录的数据库实例必须关闭
xtrabackup --copy-back --target-dir=/data/mysql/backup/base
如何磁盘空间不大,我们可以使用--move-back参数在拷贝完成后删除备份文件
同样结束后会显示completed OK字样
4. 启动数据库
首先我们需要注意下文件的权限,如果不是使用mysql账号执行的备份和恢复,首先要更改权限
$ chown -R mysql:mysql /var/lib/mysql
最后我们启动数据库即可
systemctl start mysqld
到这里我们完成使用xtrabackup进行完全备份和还原
4. 参考资料
本专题所有内容翻译子Percona XtraBackup的官方文档
可通过如下链接下载http://www.zhaibibei.cn/mysql/xtrabackup8/tutorial1/
- WCF技术剖析之三十一: WCF事务编程[下篇]
- WCF技术剖析之三十一:WCF事务编程[上篇]
- 学习SpringMVC——你们要的REST风格的CRUD来了
- 并发中的同步--WCF并发体系的同步机制实现
- WCF 技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[下篇]
- 学习SpringMVC——从HelloWorld开始
- 小程序年底重磅更新,小游戏上线,最强入口也来了!
- 学习SpringMVC——如何获取请求参数
- 谈谈关于MVP模式中V-P交互问题
- 学习Spring——两个你熟悉的不能再熟悉的场景使用
- 学习Spring——依赖注入
- 机会真的多吗?
- 浅析Hadoop大数据分析与应用
- WCF技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[上篇]
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- php array_chunk()函数用法与注意事项
- Laravel如何同时连接多个数据库详解
- PHP面向对象程序设计中的self、static、parent关键字用法分析
- php实现简单的守护进程创建、开启与关闭操作
- 关于CentOs系统自带python和yum卸载后的解决办法
- php5对象复制、clone、浅复制与深复制实例详解
- Linux命令行快速技巧之定位一个文件的办法
- ubuntu中python调用C/C++办法之动态链接库详解
- linux中使用boost.python调用c++动态库的办法
- 在Linux系统下上传项目到码云的办法
- PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】 原创
- Linux(Ubuntu 18.04)上安装Anaconda步骤详解
- php web环境和命令行环境下查找php.ini的位置
- PHP大文件分块上传功能实例详解
- Linux 命令行通配符及转义符的实现