MySQL Workbench获取DDL对象报错及数据表操作异常求助
解决MySQL数据表无响应、操作失败的实用方案
兄弟,这种表卡壳的糟心事我之前碰过好多次,给你整理几个靠谱的排查和解决思路,你挨个试下:
先揪出卡住表的“元凶”进程
打开命令行(cmd)登录MySQL,执行SHOW PROCESSLIST;,看看是不是有长时间挂着的锁或者未提交的事务把这个表堵死了。要是发现状态是Locked、或者运行时间特别久的进程,直接用KILL [进程ID];把它终止掉,之后再试试操作表。检查并修复表的完整性
不同引擎的修复方式不一样:- 要是MyISAM引擎:先停掉MySQL服务,找到对应表的
.MYD和.MYI文件,执行myisamchk -r [表名]来修复损坏的表结构; - 要是InnoDB引擎:先执行
CHECK TABLE [表名];检测是否有损坏,要是有报错,试试REPAIR TABLE [表名];。如果这招不管用,得临时修改my.cnf(或者my.ini),加上innodb_force_recovery=1,重启MySQL后再修复,修复完记得把这个参数改回去,不然会影响正常写入。
- 要是MyISAM引擎:先停掉MySQL服务,找到对应表的
绕开Workbench,用原生命令行操作
Windows7上的MySQL Workbench有时候会有兼容性bug,导致图形界面操作卡死。直接用MySQL命令行客户端登录,试试这些操作:- 先强制释放表锁:
FLUSH TABLES WITH READ LOCK;然后立刻执行UNLOCK TABLES; - 尝试重命名表:
RENAME TABLE [原表名] TO [临时表名]; - 如果能导出数据的话,先导出备份:
mysqldump -u [你的用户名] -p [数据库名] [表名] > backup.sql,之后删掉原表,再从备份文件导入数据。
- 先强制释放表锁:
排查系统层面的兼容性问题
Windows7弹出“尝试恢复”的错误,大概率是Workbench和系统的兼容性问题。试试这两个办法:- 先重启MySQL服务,再用命令行工具操作,完全避开Workbench;
- 换成旧版本的Workbench(比如6.3版本,对Windows7的兼容性比新版本好很多)。
终极兜底方案:直接操作数据文件(谨慎!)
如果上面的方法都不管用,那就得动数据文件了,一定要先做好全库备份!步骤是:- 停掉MySQL服务;
- 找到数据库的data目录,把出问题的表的相关文件(MyISAM是.frm/.MYD/.MYI,InnoDB是.frm和ibd文件)移到安全的地方备份;
- 创建一个和原表结构完全一样的空表;
- 把备份的表数据文件替换回去(InnoDB需要额外执行
ALTER TABLE [表名] DISCARD TABLESPACE;和ALTER TABLE [表名] IMPORT TABLESPACE;来导入表空间)。
内容的提问来源于stack exchange,提问作者Cauan Martins




