前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyISAM引擎表数据文件和索引文件被删除处理

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

原创
作者头像
wangwei-dba
修改2021-06-08 11:07:04
5600
修改2021-06-08 11:07:04
举报
文章被收录于专栏:mysql-dbamysql-dba

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

代码语言:javascript
复制
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.73    |
+-----------+

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

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

代码语言:javascript
复制
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 操作

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

代码语言:javascript
复制
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 }}'

代码语言:javascript
复制
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工具进行操作

代码语言:javascript
复制
安装使用:
curl -s get.dbsake.net > dbsake
chmod u+x dbsake
./dbsake  frmdump  [frm-file-path]
代码语言:javascript
复制
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导出即可,按照这种方式修复其他表就可以了

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档