小明在某次操作中,误操作导致误删除了某个表,需要立即进行数据恢复。

如果是数据量较小的实例,并且有备份,即便是全备,做一次全量恢复,然后单表导出导入,虽然麻烦一点,却也花不了多少时间;如果是数据量大的实例,但分表备份的话,那么直接导入的话也是可以的。

现实中往往是比较残酷的,我们很可能是全量备份,加上增量备份的备份策略,那么这样的代价就比较大了。

全量备份恢复,再加上 N 个增量的恢复,上百 G 甚至上 T 的数据,在等数据恢复、拷贝数据库、追同步完成的过程中,估计你后面已经站满了领导/(ㄒoㄒ)/~~

本文主要介绍利用 XtraBackup 备份工具来实现单表快速恢复,在紧急数据恢复场景下,用最短的时间来恢复数据,最大程度降低损失。

在 MySQL 5.6 之前,对基于 InnoDB 存储引擎的表,即便开启 innodb_file_per_table 选项,也是无法通过复制数据文件来达到在不同实例之间复制表的目的的。

但是,通过 Percona XtraBackup 可以导出任意基于 InnoDB 存储引擎,并且使用独立表空间的表,还可以把它们导入到 启用了 XtraDB 存储引擎的 Percona Server 或者 MySQL 5.6 中(源库不要求必须是使用 XtraDB 存储引擎或者 MySQL 5.6,但目标库要求必须)。这只适用于使用独立 .ibd 文件的表,不能导出没有 .ibd 文件的表。

注意:

如果你使用的 Percona Server 版本早于 5.5.10-20.1,变量 innodb_expand_import 应该换成 innodb_import_table_from_xtrabackup

导出表(Exporting tables)

导出表是在准备阶段完成,而不是在创建备份的时候。一旦创建完成了一个备份,使用 --export 选项来准备:

$ innobackupex --user=backup_user --password=backup_password --no-timestamp --apply-log --export /path/to/backup

这个操作会为每个启用独立表空间的 InnoDB 表创建一个以 .exp 为后缀的文件。这个过程会输出包含以下内容的信息:

..
xtrabackup: export option is specified.
xtrabackup: export metadata of table 'mydatabase/mytable' to file
`./mydatabase/mytable.exp` (1 indexes)
..

执行完毕,可以在目标目录看到 .exp 文件:

$ find /data/backups/mysql/ -name export_test.*
/data/backups/mysql/test/export_test.exp
/data/backups/mysql/test/export_test.ibd
/data/backups/mysql/test/export_test.cfg

这三个文件是导入到运行了 MySQL 5.6 或者 启用了 XtraDB 的 Percona Server 的实例时需要用到的。

注意:

MySQL 使用 .cfg 文件以指定的格式存储 InnoDB 字典。这个格式与目的相同存储了 XtraDB 字典的 .exp 不同。严格来讲,一个 .cfg 文件在导入表空间到 MySQL 5.6 或者 Percona Server 5.6 的时候并不是必须的。一个表空间即便是来自另一个实例,也能够被成功导入,但 InnoDB 存储引擎会检验 schema 看对应的 .cfg 文件是否存在于同一目录下。

每个 .exp 或者 .cfg 文件在导入相应的表的时候用到。

注意:

InnoDB 在 export 的时候需要正常关闭,即 purge 所有日志,和合并 change buffer。否则表空间不一致,导致无法导入。适用于所有常见性能问题的注意事项:足够的缓冲池,即 --use-memory,默认 100M;足够快的存储速度,否则需要很长的时间来完成导出。

导入表(Importing tables)

把一张表导入到另一个实例,首先需要创建一张与导入前的原表结构相同的表:

OTHERSERVER|mysql> CREATE TABLE mytable (...) ENGINE=InnoDB;

然后释放这张表的表空间:

OTHERSERVER|mysql> ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;

然后,复制 mytable.ibdmytable.exp(或者 mytable.cfg 如果导入到 MySQL 5.6) 文件到数据目录,接着导入表空间:

OTHERSERVER|mysql> ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;

一旦这个命令执行完毕,导进来的表数据就可用了。

参考:https://www.percona.com/doc/percona-xtrabackup/2.4/innobackupex/restoring_individual_tables_ibk.html

【理论篇】Percona XtraBackup 恢复单表的更多相关文章

  1. xtrabackup 恢复单表步骤

    1.apply-log应用redo日志,并导出表的数据字典innobackupex --apply-log --export  备份集 2.建表 如果知道表结构,则重建删除的表 create tabl ...

  2. 从xtrabackup备份恢复单表【转】

    目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...

  3. xtrabackup 恢复单个表【转】

    一.安装与备份 1. 下载安装XtraBackup$wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/tarba ...

  4. Oracle 备份、恢复单表或多表数据步骤

    Oracle 备份.恢复单表或多表数据步骤,适用于 Oracle 8.9.10.        *备份单表或多表数据: exp user/password@server file=filefullpa ...

  5. 从xtrabackup备份恢复单表

    目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...

  6. 利用binlogserver恢复单表实验【转】

    使用场景 每次开启binlogserver 指定了mysql-bin.0000XX 后都会从该点从头进行传输一次 创建binlogserver [root@mysql-zst3 binlogserve ...

  7. MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据

    数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...

  8. 从mysqldump整库备份文件中恢复单表

    最近,系统更新出现了问题,比较紧急,需要对三张表进行回档.由于我们都是采用mysqldump进行每天全备整库,数据量比较大,一个备份文件大概有70G,需要从这个70G文件中恢复三张表,真是蛋疼至极啊, ...

  9. Percona Data Recovery Tool for InnoDB工具恢复单表的案例

    今天上班有个朋友询问我,相关Percona Data Recovery Tool for InnoDB恢复数据中的一些问题,比如说delete,没法恢复数据,原先做过类似的异常处理就,再次模拟了下相关 ...

随机推荐

  1. loadrunner:判断是否服务器连接池瓶颈

    分析Web Resources中的Connections per second可以判断是否服务器连接池瓶颈. connections per second会给出两种不同状态的连接数:中断的连接和新建的 ...

  2. [lua] 游戏客户端逻辑使用lua协程

    我们的游戏有这样一种情景:客户端中角色需要用到一些公会的数据,但服务器不会在玩家(创角后)一进入到游戏里就推送给玩家,而是需要客户端自己在需要的时候向服务器请求公会的数据,之前的实现就是在请求消息的时 ...

  3. adt的问题An internal error has occurred. After scene creation, #init() must be called

    这个问题困扰了我好久,我也尝试去百度.google无济于事啊,让我寝食难安,太难受了,我把它贴出来,希望后人不绕弯子... 解决办法: 即可,解决这一个问题,现在酣畅淋漓,挥洒自如的capy代码了

  4. Android -- 自定义StepView实现个人信息验证进度条

    1,项目中要用到个人信息验证的在网上找了一下,好像有封装好了的StepView,首先感谢一下作者,这是作者的地址,效果图如下: 2,正准备撸起袖子就是一顿复制粘贴的时候,发现效果图成这个样子了(其实这 ...

  5. 移动端高清、多屏适配方案——rem

    背景: 开发移动端H5页面 一套设计图 不同尺寸的手机 不同分辨率的手机 方案:使用rem作为单位解决一套设计图适应不同分辨率,不同尺寸的手机. 概念: REM(font size of the ro ...

  6. rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可

    一:总体概述. 1.windows上面首先装CW_rsync_Server.4.1.0_installer,安装时要输入的用户名密码要记住哦!接下来就是找到rsyncd.conf进入配置细节 2.li ...

  7. QQ互联 redirect uri is illegal(100010)的解决办法,很简单

    我的地址栏内容是:http://openapi.qzone.qq.com/oauth/show?which=ConfirmPage&display=pc&response_type=c ...

  8. windows phone 8.1开发:文件选择器FileSavePicker

    上一篇文章小梦分享了文件选择器FileOpenPicker的用法,这篇文章我们继续分享FileSavePicker的用法,FileSavePicker的用法几乎和FileOpenPicker用法一模一 ...

  9. 腾讯QQ会员技术团队:以手机QQ会员H5加速为例,为你揭开sonic技术内幕

    目前移动端越多越多的网页开始H5化,一方面可以减少安装包体积,另一方面也方便运营.但是相对于原生界面而言,H5的慢速问题一定被大家所诟病,针对这个问题,目前手Q存在几种方案,最常见的便是离线包方案,但 ...

  10. TFS发布计划发送到钉钉消息群

    由于工作中需要用到钉钉,每天都要和钉钉打交道:上下班打卡.出差请假流程.各种工作讨论组,不一而足,工作已然和钉钉绑在了一起,难怪有广告词: 微信是一个生活方式,钉钉是一个工作方式. 我们是钉钉机器人内 ...