背景:因为机器损坏,数据库的索引文件什么的都损坏了。只留下了一个mysql的data目录…
此方法恢复数据的前提:建表用的innodb索引
备注:如果mysql的目录还都在,可以先尝试,将mysql下的目录都拷贝到一个新mysql目录下,启动看看能不能用,不能用后再尝试下面方法
mysql会有一个data目录存储表结构和表数据。下面的目录结构大概如下:
ib_logfile0
ib_logfile1
ibdata1
ibtmp1
xx数据库1
xx数据库2
每个数据库目录下面的表内容如下:
表1.frm
表1.ibd
表2.frm
表2.ibd
.frm文件:表结构文件
.ibd文件:表数据文件
下面为恢复数据方法
备注:这里假设要备注的库名为db1,表名为table1
1、先备份要恢复数据的表文件
table1.frm和table1.ibd文件
可以直接把原数据库的data目录整个拷贝过来,如果指定了data目录可以通过查看mysql的进程看到具体配置位置
2、新搭建一个mysql
我用的5.7,搭建在mac本地
3、将mysql下的log文件删除,不要保留和要备份的库相同的内容
如果你是完全新建的一个数据库,和原来的库表完全无关,可以忽略这步骤
rm -rf /usr/local/mysql/data/ib_logfile0
rm -rf /usr/local/mysql/data/ib_logfile1
rm -rf /usr/local/mysql/data/ibdata1
rm -rf /usr/local/mysql/data/btmp1
rm -rf /usr/local/mysql/data/db1
4、新建数据库
链接上mysql命令行
create database db1;
5、通过命令行新建原来的表,
注意,一定在建表命令后加【ROW_FORMAT=COMPACT】防止冲突
例如:
1 2 3 4 5 6 7 | DROP TABLE IF EXISTS `table1`; CREATE TABLE `table1` ( ` name ` varchar (200) NOT NULL DEFAULT '' COMMENT 'key值' , `value` varchar (500) DEFAULT NULL COMMENT 'value值' , ` desc ` varchar (500) DEFAULT NULL COMMENT '关于当前key的描述信息' , PRIMARY KEY (` name `) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; |
如果不记得表结构了,可以先参考下面的文章找回表结构,dump出sql结构后获得创建表的语句:
6、将新建的表DISCARD掉
命令行执行:
ALTER TABLE table1 DISCARD TABLESPACE;
7、将备份的源表数据文件.ibd拷贝过来
将.ibd文件放到新数据库的data目录下,覆盖刚创建表时新生成的.ibd文件
即/usr/local/mysql/data/db1/下
8、将拷贝过来的.ibd表数据导入进来
ALTER TABLE `table1` IMPORT TABLESPACE;
然后数据就恢复啦~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2017-10-31 mac通过命令行获取证书和配置文件过期时间