专栏首页mysql-dbaMyISAM引擎表数据文件和索引文件被删除处理
原创

MyISAM引擎表数据文件和索引文件被删除处理

海外有一台服务器受到攻击,上面有自建的mysql数据库,要把数据库备份下来,要到地址账号密码登录上去看了一下mysql版本是5.1的

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.73    |
+-----------+

于是就进行mysqldump导出,执行发现报错

mysqldump: Couldn't execute 'show create table `dr_app`': Unknown table engine 'InnoDB' (1286)

root@li1881-239:/home/sql#>mysqldump -S /var/lib/mysql/mysql.sock -uroot -p'xxxxxx' --hex-blob -R -E --skip-lock-tables --databases xxxx > db_xxxx_20210607.sql ;
mysqldump: Couldn't execute 'show create table `dr_app`': Unknown table engine 'InnoDB' (1286)

不能进行show create table 操作

登录到数据执行查询也报错

mysql> select * from dr_app;
ERROR 1286 (42000): Unknown table engine 'InnoDB'
mysql> 
到后台数据库目录查看表
root@li1881-239:/var/lib/mysql/xxx#>ll
total 2.3M
drwx------  2 mysql mysql  12K [2017-07-07 08:31] .
drwxr-xr-x 13 mysql mysql 4.0K [2021-06-07 10:17] ..
-rw-rw----  1 mysql mysql   65 [2015-01-26 03:44] db.opt
-rw-rw----  1 mysql mysql 8.6K [2015-01-26 03:45] dr_app.frm
-rw-rw----  1 mysql mysql 8.6K [2015-01-26 03:45] dr_apphistory.frm
-rw-rw----  1 mysql mysql 8.8K [2015-01-26 03:46] draw_action.frm
-rw-rw----  1 mysql mysql 8.8K [2015-01-26 03:46] draw_action_log.frm
-rw-rw----  1 mysql mysql 112K [2015-02-15 10:11] draw_action_log.MYD
-rw-rw----  1 mysql mysql  13K [2015-02-15 10:53] draw_action_log.MYI
发现dr_app表的MYD和MYI文件被删除了

文件被删除了这台服务的mysql也没有备份(几年前的数据库),领导说被删除的只需要备份表结构就可以了

进一步发现被删除的表文件有几百个,需要把这些被删除的表找出来,然后通过frm文件恢复表结构

进到数据库目录下取表名,先把进行分组计数,正常情况下表名对应三个文件,我们只需要找出表名对应的文件只有1个(说明它的MYD,MYI文件被删除了)

如下命令:

ll |awk '{print $8}' |awk -F '.' '{count[$1]++;} END {for(i in count) {if(count[i]==1) print i }}'

root@li1881-239:/var/lib/mysql/drawwiz#>ll |awk '{print $8}' |awk -F '.' '{count[$1]++;} END {for(i in count) {if(count[i]==1) print i }}'
dr_download201501
draw_bglabel
dr_download201502
draw_recommendapp201510
dr_download201503
draw_recommendapp201511
dr_download201504
draw_recommendapp201512
draw_imgcommentlike
dr_download201505
dr_download201506
dr_download201507
dr_download201508
...............
...............

因为是MyISAM引擎表试着用repair table ,myisamchk 都不能解决问题

那现在只有一种方式了就是从frm文件恢复建表语句,使用dbsake工具进行操作

安装使用:
curl -s get.dbsake.net > dbsake
chmod u+x dbsake
./dbsake  frmdump  [frm-file-path]
root@li1881-239:/home#>./dbsake frmdump /var/lib/mysql/cleanwizme/oemappicon.frm;
--
-- Table structure for table `oemappicon`
-- Created with MySQL Version 5.1.73
--
CREATE TABLE `oemappicon` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(100) NOT NULL,
  `md5` varchar(50) NOT NULL,
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `ip` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

把表引擎改为MyISAM 然后删除原来的表重建 再次执行mysqldump导出即可,按照这种方式修复其他表就可以了

最后:表的数据是丢失了,所以数据库一定要备份,备份大于一切,进行数据库和服务器的安全加固很重要

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL表删除数据,索引文件会不会变小?

    对于千万级的表数据存储,删除大量记录后,表文件大小并没有随之变小。好奇怪,是什么原因导致的?不要着急,接下来,我们来深入剖析其中原因

    Java3y
  • MySQL - 常见的三种存储引擎

    数据库存储引擎: 是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水...

    battcn
  • mysql存储引擎及适用场景

    MySQL存储引擎有MyISAM、InnoDB、MEMORY、CVS、MRG_MyISAM、BLACKHOLE、SEQUENCE、ARCHIVE等,常用的有In...

    vimsudoers
  • MySQL存储引擎之Myisam和Innodb总结性梳理

    Mysql有两种存储引擎:InnoDB与Myisam,下表是两种引擎的简单对比 MyISAM InnoDB 构成上的区别: 每个MyISAM...

    洗尽了浮华
  • MySQL 存储引擎 InnoDB 与 MyISAM 的区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(Berke...

    魏晓蕾
  • 搞定PHP面试 - MySQL基础知识点整理 - 存储引擎

    可以在 mysql 客户端中,使用 show engines; 命令可以查看MySQL支持的引擎:

    猿哥
  • MySQL存储引擎MyISAM与InnoDB的区别

    在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。

    黄啊码
  • mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择

        数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁...

    洋仔聊编程
  • MySQL存储引擎MyISAM与InnoDB区别总结整理

    在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。

    Java后端技术
  • Mysql-4-数据库的基本操作

    1.创建数据库 create database database_name; 例:create database aa; show create databas...

    用户1173509
  • 性能测试告诉你 mysql 数据库存储引擎该如何选?

    数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平...

    程序员白楠楠
  • 听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!

    2、 确保表中的每列都和主键相关(不然东一句西一句就乱了) 每张表中只有一个主键 建立在第一范式之上的,一个表中只能保存一种数据 不可以把多种数据保存在同...

    不吃小白菜
  • MySQL进阶笔记-2(存储引擎)

    最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关...

    千羽
  • mysql各种引擎对比、实战

    sunsky
  • MySQL 存储引擎 MyISAM 与 InnoDB 区别

    存储引擎 Storage engine:MySQL 中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    用户1289394
  • MySQL存储引擎总结

    前言 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。等一下,...

    wangxl
  • 「Mysql索引原理(一)」1.存储引擎简介

    0. 前言 1. 存储引擎查看 2. InnoDB存储引擎特性存储InnoDB历史 3. MyISAM存储引擎前言特性加锁与并发修复索引特性延迟更新索引键...

    源码之路
  • MySQL 存储引擎 原

    使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。

    wuweixiang
  • MySQL存储引擎知多少

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢?有时候面试题中也会问道MyS...

    Bug开发工程师

扫码关注云+社区

领取腾讯云代金券