今天给大家介绍一种,在Mysql数据库中,利用InnoDb的表空间传输功能,帮助你恢复drop的业务表。

Mysql表空间传输限制

要使用Mysql数据库表空间传输功能,有2个限制
1.Mysql数据库版本必须在5.6以上
2.Mysql数据库必须开启innodb_file_per_table

测试目标

测试库tmp中的test1表被drop了,需要用testdb库中的test1表记录进行恢复

目标库测试表drop

登录数据库,drop掉tmp.test1业务表

[root@localhost] 16:14:12 [tmp]>drop table test1;
Query OK, 0 rows affected (0.41 sec)

在目标库创建test1空表
从源库testdb导出test1表定义语句,并查看原表记录

[root@localhost] 15:49:45 [testdb]>show create table testdb.test1\G;
*************************** 1. row ***************************Table: test1
Create Table: CREATE TABLE `test1` (`id` int(11) NOT NULL,`name1` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',`name2` char(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)ERROR:
No query specified[root@localhost] 15:49:54 [testdb]>select * from testdb.test1;
+----+-------+-------+
| id | name1 | name2 |
+----+-------+-------+
|  1 | test1 | test1 |
|  2 | test  | test  |
+----+-------+-------+
2 rows in set (0.00 sec)

在目标库上创建空表tmp.test1

[root@localhost] 15:50:45 [tmp]>show create table tmp.test1\G;
*************************** 1. row ***************************Table: test1
Create Table: CREATE TABLE `test1` (`id` int(11) NOT NULL,`name1` char(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',`name2` char(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)

discard删除目标库业务表ibd文件

ALTER TABLE tmp.test1 DISCARD TABLESPACE;

从源库中拷贝test1表的ibd文件到目标库

[mysql@mysql tmp]$ cp /data/mysql/data/3306/testdb/test1.ibd /data/mysql/data/3306/tmp/
[mysql@mysql tmp]$ ls -l
total 108
-rw-r-----. 1 mysql mysql  8620 Sep 17 15:50 test1.frm
-rw-r-----. 1 mysql mysql 98304 Sep 17 15:52 test1.ibd

目标库导入ibd文件
在目标库中,导入ibd文件

[root@localhost] 15:51:34 [tmp]>ALTER TABLE tmp.test1 IMPORT TABLESPACE;
Query OK, 0 rows affected, 1 warning (0.02 sec)[root@localhost] 15:53:11 [tmp]>SHOW WARNINGS;
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                                   |
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory) Error opening './tmp/test1.cfg', will attempt to import without schema verification |
+---------+------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)[root@localhost] 15:53:18 [tmp]>select * from tmp.test1;
+----+-------+-------+
| id | name1 | name2 |
+----+-------+-------+
|  1 | test1 | test1 |
|  2 | test  | test  |
+----+-------+-------+
2 rows in set (0.00 sec)

到此,可以看到,已经将源库testdb.test1业务表的数据,恢复到目标库tmp.test1的业务表了。

总结
在这里有一个步骤最为重要,就是导入ibd文件,可以想想,导入idb文件的时候,Mysql到底做了那些事情呢,总共做了3件事情
1.导入的ibd文件,每个page都会做一次checksum,看看是否有坏页
2.更新每个page的头部的表空间id和LSN号
3.将page页设置成脏页,并刷新到磁盘

https://mp.weixin.qq.com/s/4iXbW445nX1yn1qG_eafbA

Mysql数据库drop表不用跑路,表空间传输助你恢复数据相关推荐

  1. 人员考勤,MySQL数据库一个表自动生成3表筛选人员迟到早退缺勤

    人员考勤,MySQL数据库一个表自动生成3表筛选人员迟到早退缺勤 </h1><div class="clear"></div><div c ...

  2. MySQL数据库 第5章:单表操作

    MySQL数据库 第5章:单表操作 5.1 数据操作 5.1.1 复制表结构和数据 5.1.2 解决主键冲突 5.1.3 清空数据 5.1.4 去除重复记录 5.2 排序与限量 5.2.1 排序 5. ...

  3. Mysql数据库基本操作(七)多表查询-子查询,表自身关联查询

    多表查询还有前面的两块内容--内连接查询,外连接查询,希望看到这篇博客的朋友先去看看我的"Mysql数据库"专栏中Mysql数据库基本操作(六)多表查询-内连接,外连接这一章博客, ...

  4. Mysql数据库基本操作(六)多表查询-内连接查询,外连接查询

    数据准备 use mydb3 ; --创建部门表 create table if not exists dept3 ( deptno varchar (20) primary key , --部门号 ...

  5. 学会这个删库再也不用跑路了~ --技术流ken

    前言 相信每一个学IT的人或多或少都听说过从删库到跑路这个梗~下图也是在各种交流群屡禁不止,新人听着也是瑟瑟发抖. 人们茶余饭后,街头巷角难免要问... 下面技术流ken就教给各位新手们一招删库再也不 ...

  6. MySQL从删库到跑路(2):大爷的SQL私房菜

    大爷的SQL私房菜 夜色如墨,月凉如水,一轮皎洁的圆月高高地挂在夜空之上,平日里鼾声如雷的室友今夜也停止了打鼾,如此静谧的夜晚,李有为却辗转难眠. 时间悄然来到凌晨一点半,他已经在窗边站了53分钟23 ...

  7. MySQL从删库到跑路(5):in and not

     "哈哈哈哈,看你这几天没来上课,我还以为你去拜什么高人为师了?原来就是这个烂番薯.臭鸟蛋的小卖部大爷学装逼,你逗我玩呢?哈哈哈哈哈"  "哈哈哈哈,一个老屌丝,一个小屌 ...

  8. mysql binlog 备份_偷偷的删表删库,跑路之前,尝试用binlog恢复MySQL数据

    一. Binlog二进制日志: MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(所有的写入,除了(读)数据查询语句select),以事件形式记录,还 ...

  9. MySQL数据库(四):多表查询、视图、事务、索引、函数、Go连接MySQL

    MySQL数据库:视图.事务.索引.函数.Go连接MySQL 1.1 目录 文章目录 1.1 目录 1.2 多表查询分类 1.2.1 内连接[inner join] 1.2.2 左外连接[left j ...

最新文章

  1. WCF动态添加ServiceKnownType
  2. linux运维第二讲
  3. 交叉熵损失函数数学推导
  4. Android 人脸识别
  5. 2021-11-04Oracle19c 图形化安装,在windoes上)
  6. 正则表达式的匹配规则
  7. ie8 html 语音标签,让IE8支持html5中的video标签
  8. cv岗工作做什么_只会python能做什么工作
  9. bin文件如何编辑_每日学习:Linux文件与目录管理常用命令解析
  10. 反插值法求函数方程的根(内附代码及例题)
  11. Oracle截取字符串函数和查找字符串函数,连接运算符||
  12. 计算机内存不足16g内存,加装16G内存,电脑却运行卡顿、崩溃?原来是这项设置有问题!...
  13. iOS开发笔记1:ToDoList、相册、地图应用及新浪微博
  14. C指针之指针与数组的天生姻缘
  15. html p标签行间距怎么调,css怎么设置行距?
  16. GTK帮助文档的使用
  17. python 操作word 替换字符串为图片_用python将.docx文件中的字符串替换为jpg
  18. IP-guard功能详解——安全U盘
  19. 读书笔记- 韩鹏杰 -《道德经》
  20. 微信小程序开发之后的推广细节

热门文章

  1. 基于PyTorch+YOLOv4的口罩佩戴检测,附数据集
  2. 2017年网易游戏数据挖掘/机器学习实习生笔试
  3. logo qt添加_Qt官方示例-窗口标志
  4. oracle stalestats_深入理解oracle优化器统计数据(Optimizer Statistics)
  5. python中的sklearn教程_python作业之sklearn
  6. 概率论符号_考研概率论知识点总结1
  7. PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
  8. [每日一题] OCP1z0-047 :2013-07-13 oracle 10g正则表达式 REGEXP_LIKE 用法
  9. 互联网轻量级框架SSM-查缺补漏第九天
  10. 强一致性、弱一致性、最终一致性