1. 该方法只介绍了如何救回这个表名(数据不恢复) 如果想要恢复原来数据 直接用extundelete把文件恢复后放回去即可
  2. 并且是适用于平时没有全备的情况下  如果有全备 直接那全备的frm和idb文件放回去 就可以了
  3. 该方法同样适用于数据表迁移(只迁移一个表)  因为discard再import的速度 远比先dump再恢复的速度要快得多

建议: 平时备份一下表结构是非常重要的 

-- 如果你直接删除了mysql的表文件 (.frm .idb)  在mysql5.6 可能你就悲剧了  可能再也用不回这个表名了

例子如下

-- 全在datadir目录下操作
 
-- 直接删除了表 tracking20160501的物理文件
 
 
1
2
rm -rf tracking20160501.*            
-- 删除了表tracking20160501的frm文件和idb文件
-- 此时在数据库已经看不到该表
 
1
2
mysql> show tables;                                                      
-- 查看数据库表
-- 但若想再创建该表或删除该表  也许就悲剧了
 
1
2
3
4
5
6
mysql> create table tracking20160501(id int);
ERROR 1050 (42S01): Table 'tracking20160501' already exists                        
-- 明明已经看不到该表了 却显示表已存在
mysql> drop table tracking20160501;
ERROR 1051 (42S02): Unknown table 'kdnet_analyze.tracking20160501'        
-- 悲剧了吧 创建不到也删不到。。
 
-- 查看一下现在的物理文件情况
 
1
2
3
ls tracking20160501.*
tracking20160501.ibd                              
 -- 之前删除了的表空间文件 他自己又创建了个出来  可能是刚刚的create table命令导致的 这里不用理
原因: 由于直接删除了表的物理文件 但mysql的信息库 information_schema 或 mysql 库对该表的信息还存在(具体记在哪里 还没找出来) 导致mysql还认为该表存在 所以创建不了 删除表时由于又找不到对应的物理文件 所以也删除不了  这样!! 难道这个表名就无法再用了吗?  有解决方法 如下

解决方法: 

-- 找其他表(最好是表结构一样的) 这里找的表叫ip_taobao 先复制这个表的.frm(表结构)文件 改名为误删的表名
 
1
2
cp -a ip_taobao.frm tracking20160501.frm                        
-- 这里为了保持mysql文件的拥有人和所属组 所以使用-a参数
-- 如果下面的操作有什么奇葩问题 可以重启一下数据库
 
-- 在mysql里 使用discard space命令 废弃误删表的表空间文件
 
1
alter table tracking20160501 discard tablespace;
-- 再复制ip_taobao表的表空间文件 改名为误删的表名
 
1
cp -a ip_taobao.ibd tracking20160501.ibd                        -- 同样使用-a 保持拥有人和所属组

-- 在mysql里 使用import space命令 导入新的表空间文件

 
1
2
mysql> alter table tracking20160501 import tablespace;             -- 导入时间可能会长点
Query OK, 0 rows affected, 5 warnings (7 min 36.94 sec)
-- 现在可以正常查询、删除和创建回这个表了
 
1
2
3
mysql> select * from tracking20160501 limit 1
mysql> drop table tracking20160501;
mysql> create table tracking20160501(id int);

误删mysql表物理文件的解决方法(不涉及恢复数据)的更多相关文章

  1. linux下误删mysql的root用户,解决方法

    开始对liunx界面不熟悉,可能由于不小心,把root误删了,怎么办? 1. # killall mysqld    干掉所有mysql进程 2. # mysqld_safe --skip-grant ...

  2. mysql cpu使用率过高解决方法

    mysql cpu使用率过高解决方法 1 mysql查看正在运行的语句 并且查看运行最多的mysql语句 MySQL 打开 general log 后,所有的查询语句都会记录在 general log ...

  3. DBeaver、Navicat、MySQL高频报错及解决方法,此文持续更新

    目录 第一坑,没有用管理员身份 第二坑,MySQL 服务无法启动 第三坑,报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost ...

  4. 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法

    mysql,mysqldump,Mysqladmin,php连接mysql服务常会提示下面错误: ERROR 2002 (HY000): Can't connect to local MySQL se ...

  5. 启动mysql时显示:/tmp/mysql.sock 不存在的解决方法

    启动mysql时显示:/tmp/mysql.sock 不存在的解决方法 启动mysql时报错的解决(mysql 5.0.45 redhat as 43)  ====================== ...

  6. 启动Mysql服务提示Can’t connect to local MySQL server through socket的解决方法

    启动Mysql服务常会提示下面错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/ ...

  7. Centos下忘记mysql的root密码的解决方法

    Centos下忘记mysql的root密码的解决方法 一:(停掉正在运行的mysql) [root@NetDakVPS ~]# service mysql stop 二:使用 “--skip-gran ...

  8. [转]MySQL忘记密码的正确解决方法

    http://database.51cto.com/art/201005/201986.htm 以下的文章主要介绍的是MySQL忘记密码的正确解决方法,在实际操作中如果你忘记MySQL密码是一件很头痛 ...

  9. Can’t connect to local MySQL server through socket的解决方法

    http://www.aiezu.com/db/mysql_cant_connect_through_socket.html mysql,mysqldump,php连接mysql服务常会提示下面错误: ...

随机推荐

  1. 散列算法-MD5

    信息摘要技术把明文内容按某种规则生成一段哈西值,即使明文消息只改动了一点点,生成的结果也会完全不同. MD5(Message-digest algorithm 5)就是信息摘要的一种实现,它可以从任意 ...

  2. javaweb的web.xml配置说明,初始化过程

    [重点]初始化过程可知容器对于web.xml的加载过程是context-param >> listener  >> fileter  >> servlet 首先了解 ...

  3. Java NIO系列教程(五) 通道之间的数据传输

    在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...

  4. 二叉树的递归,非递归遍历(C++)

    二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...

  5. Python数据分析之pandas入门

    一.pandas库简介 pandas是一个专门用于数据分析的开源Python库,目前很多使用Python分析数据的专业人员都将pandas作为基础工具来使用.pandas是以Numpy作为基础来设计开 ...

  6. vue-cli中全局组件的注册使用

    一.全局注册 在install函数中全局注册组件,没毛病,老铁. 二.其它组件调用 直接在其他  .vue组件中直接写 <popup ref="popup">,然后就可 ...

  7. MVC应用程序使用Entity Framework

    创建空的MVC应用程序,为了想使用Entity Framework的类库,发现即无法正常引用.如下图,Insus.NET已经明确引了System.Data.Entity(下图Highlight的代码) ...

  8. 【MongoDB-query查询条件】

    在上一篇中简要使用了C# 对MongoDB进行数据操作,这里补充一些MongoDB query查询条件文档: Query.All("name", "a",&qu ...

  9. 深入贯彻闭包思想,全面理解JS闭包形成过程

    谈起闭包,它可是JavaScript两个核心技术之一(异步和闭包),在面试以及实际应用当中,我们都离不开它们,甚至可以说它们是衡量js工程师实力的一个重要指标.下面我们就罗列闭包的几个常见问题,从回答 ...

  10. JavaScriptDay3

    js对标签的操作 创建标签:document.createElement("tag"); 便签添加内容 : document.createElement("tag&quo ...