如何从一个XtraBackup完整备份中恢复一个InnoDB表
有时候我们从一个完整的数据库备份中不需要整库恢复,只需要恢复其中的一个或者几个表,如果使用Percona的XtraBackup备份在恢复的时候如何只恢复部分数据呢?
转载请尊重原创、保留相关链接本文来自多宝平台 :http://www.mbodb.com
下面用例子来演示
首先为了能恢复表需要做以下操作:
1、InnoDB_FAST_SHUTDOWN = 0 --此参数MySQL在关闭的时候,需要完成所有的full purge和merge insert buffer操作.
2、InnoDB_File_Per_Table = ON --此参数修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间.
开始使用XtraBackup备份,这里用到--export参数.
[mysql@localhost mysql]$ innobackupex-1.5.1 --defaults-file=/etc/my.cnf --export /mysql/backup/
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
Get the latest version of Percona XtraBackup, documentation, and help resources:
http://www.percona.com/xb/p
140312 16:06:45 innobackupex-1.5.1: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_file=/etc/my.cnf;mysql_read_default_group=xtrabackup' (using password: NO).
140312 16:06:45 innobackupex-1.5.1: Connected to MySQL server
140312 16:06:45 innobackupex-1.5.1: Executing a version check against the server...
140312 16:06:51 innobackupex-1.5.1: Done.
IMPORTANT: Please check that the backup run completes successfully.
......
......
......
备份完成之后应用日志使备份多宝保持一致性
[mysql@localhost backup]$ innobackupex-1.5.1 --defaults-file=/etc/my.cnf --apply-log --export /mysql/backup/2014-03-12_16-06-52/
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013. All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
Get the latest version of Percona XtraBackup, documentation, and help resources:
http://www.percona.com/xb/p
140312 16:11:47 innobackupex-1.5.1: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_file=/etc/my.cnf;mysql_read_default_group=xtrabackup' (using password: NO).
140312 16:11:47 innobackupex-1.5.1: Connected to MySQL server
Connected successfully
140312 16:11:47 innobackupex-1.5.1: Connection to database server closed
IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex-1.5.1
prints "completed OK!".
......
......
......
现在我们登录MySQL删除一些t表的数据
mysql> select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
+----+
11 rows in set (0.06 sec)
mysql> delete from t where id between 7 and 10;
Query OK, 4 rows affected (0.18 sec)
mysql> select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 11 |
+----+
7 rows in set (0.00 sec)
这时我们Discard表
mysql> ALTER TABLE t DISCARD TABLESPACE;
Query OK, 0 rows affected (0.12 sec)
从备份目录复制文件到数据库目录
[mysql@localhost test]$ cp -p -r t.cfg t.ibd ../../../data/test/
我们进入到MySQL之后Import表
mysql> ALTER TABLE t import TABLESPACE;
Query OK, 0 rows affected (0.07 sec)
查看表t
mysql> select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
+----+
11 rows in set (0.00 sec)
注意:
在复制备份文件的时候一定要复制后缀cfg文件,否则在Import的时候就会报Warning.例如如下的信息:
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory) Error opening './test/t.cfg', will attempt to import without schema verification |
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
cfg文件的用处主要是在MySQL5.6执行"Flush Table xxx Export;"之后使.ibd文件保持一致性,同时这个文件会生成一个.cfg文件,在做Import的时候会对导入过程进行校验,但是在MySQL5.6.8版本之后也不是必须要有.cfg文件.如果真没有,在导入的时候有可能就会报出上面的错误,所以为了安全还是复制它.
如果表有外键在Discard的时候执行如下命令:
set FOREIGN_KEY_CHECKS=0;
在Import表之后执行以下命令恢复外键检查
set FOREIGN_KEY_CHECKS=1;
参数--export的英文解释如下:
This option is passed directly to xtrabackup's --export option. It
enables exporting individual tables for import into another server.
如何从一个XtraBackup完整备份中恢复一个InnoDB表相关推荐
- 从库备份中恢复一张表
很多时候我们需要从mysqldump备份文件中恢复出一张表,通常的做法可能是先把sql 文件恢复到一个测试数据库,然后再使用mysqldump 导出一张表,再恢复到线上,这样,如果数据量不大这方法是可 ...
- oracle恢复某个表的数据库,如何从rman的全备份中恢复一张表?
最初由 orientzkd 发布 [B]. 怎么用rman复制数据库,有详细的步骤么 [/B] 1,用rman做一个数据库的全备份 2,新创建一个辅助的instance,将instance start ...
- mysql 备份 没有自动删除文件_删掉spfile在没有自动备份控制文件下从以前的rman备份中恢复数据库...
1.首先要有一个包含spfile备份的rman备份: run { allocate channel c1 device type disk; allocate channel c2 device ty ...
- 从rman 备份中恢复表
先熟悉下 " 从rman 备份中恢复表" 的背景以及要求: 在 RMAN 中提供了表级别恢复( RECOVER TABLE ).在 Oracle 12c 中,在发生 drop 或 ...
- mysql 全库 备份 恢复_从MySQL全库备份中恢复某个库和某张表
在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-d ...
- ZeroMQ接口函数之 :zmq_msg_init_data - 从一个指定的存储空间中初始化一个ZMQ消息对象的数据...
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_data zmq_msg_init_data(3) ØMQ Manual - ØMQ/3.2.5 ...
- 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- Confluence 6 从其他备份中恢复数据
一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复. 如果你在恢复压缩的 XML 备份的时候遇 ...
- 如何在Linux中恢复一个删除了的文件
你曾经是否遇到这样的事?当你发现的时候,你已经通过删除键,或者在命令行中使用 rm 命令,错误的删除了一个不该删除的文件. 在第一种情况下,你可以到垃圾箱,搜索那个文件,然后把它复原到原始位置.但是第 ...
最新文章
- php如何word转html格式文件,PHP将上传word文件,转化为Html格式,(多种转换方式)
- 由Linux内核bug引起SSH登录缓慢问题的排查与解决
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 软件开发人员该如何深入理解自己的代码
- 网工路由基础(8)路由重分布
- 奇妙的安全旅行之MD算法
- 【Java】java.util.Objects 工具类方法研究
- EqualLogic PS5000试用手记
- CodeWithMosh--mysql 学习笔记(4) -- 相关数据类型
- B/S VS C/S
- 聚合四方支付系统架构及所需配置
- 关键字查询地理经纬度及省份-市
- 08_基于IP的伪装
- win7音量图标点了没反应的修复方法
- C专家编程 读书笔记
- 掌机发展简史及未来趋势分析
- SQL Server2019重新下载失败
- 华为手机设置屏幕常亮
- 乐优商城day13(商品详情页,rabbitMQ安装)
- Substrate 技术及生态6月大事记 | Polkadot Decoded 圆满落幕,黑客松获胜项目为生态注入新生力量
热门文章
- ]获取android应用的MD5签名
- 弘兵金融学院 站在山顶 看不见山
- Ubuntu18及22安装NVIDIA驱动、CUDA、CUDNN、Pytorch
- 这个时代,“寒门再难处贵子”【转载】
- vue3.0导出excel带格式
- Unity Shader 之 简单 护盾Shield 效果的实现
- 中望3D 2021 自动缩放基准面大小
- 2D Pose人体关键点实时检测(Python/Android /C++ Demo)
- 尤大都推荐的组件库是如何开发出来的?
- 深度学习图像标签标注软件labelme超详细教程