欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Mysql搬移,数据表出问题,怎么修复?

程序员文章站 2024-01-10 09:54:58
...
是通过复制、粘贴mysql的整个data文件夹进行恢复数据的
现在发现MyISAM类型的表都是正常的。

但是有个数据库能列出数据表,但是点击表之后就说:
#1146 - Table 'eval.class' doesn't exist


怎么修复?


回复讨论(解决方案)

只有 MyISAM类型 的表可以通过拷贝文件进行迁移
其他类型的表都必须通过迁移工具迁移

拷贝全了没有? 里面的ibdata1文件拷贝了没有?

直接拷贝 ibdata1 是不妥当的
1、他会覆盖目标数据库的否写表数据
2、把原库的垃圾也带过来了
3、会因磁盘格式的不同等原因,在创建数据块索引时发生错误,无法修复时就废掉了

ibdata1也拷贝了。
有frm文件也不能修复或拿到部分数据么?

先停止 mysql 服务
用命令行方式启动 mysql
你会看到有关文件修复的各种信息

我以前也做过这种在两个 mysql 下直接拷贝文件的事情,但总是没能完美的处理成功
后来都是用指派 datadir 和 innodb_data_file_path 来完成不同 mysql 下数据共享的

你或许可以这样做:在原来的 mysql 中把 innodb 的表转换成 MyISAM 的表(管理工具中只是点点鼠标而已)
将转换后的 MyISAM 表拷贝到目标位置,然后在转换成 innodb

为什么不用mysqldump来做?如果两个mysql版本不一致,可能还需要工具修复下导出的sql文件
直接copy文件夹这种不可取

先停止 mysql 服务
用命令行方式启动 mysql
你会看到有关文件修复的各种信息

我以前也做过这种在两个 mysql 下直接拷贝文件的事情,但总是没能完美的处理成功
后来都是用指派 datadir 和 innodb_data_file_path 来完成不同 mysql 下数据共享的

你或许可以这样做:在原来的 mysql 中把 innodb 的表转换成 MyISAM 的表(管理工具中只是点点鼠标而已)
将转换后的 MyISAM 表拷贝到目标位置,然后在转换成 innodb



原来的mysql已经没了,只有备份文件了,可以恢复吗?

那原来的 mysql 的版本号是多少?

给个链接,看看对你是否有帮助 http://www.baidu.com/s?wd=innodb+frm%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F&ie=utf-8

给个链接,看看对你是否有帮助 http://www.baidu.com/s?wd=innodb+frm%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F&ie=utf-8



感谢!
已经可以了
老版本的数据文件和表文件是在data目录下的
新版本的数据文件在mysql目录下,表文件在data目录下
移动一下ibdata1文件就可以了。