减少此类问题发生的办法就是尽量减少服务器无故断电
关闭服务器时
最后先手动关闭mysql数据库
下面看看这个问题
Cant open file: ×××MYI (errno: )这个错误一般就是你的数据库表文件损坏造成的造成的原因大概是你把数据库文件挪来挪去的结果当然不排除其他原因啊
具体数据库出现错误的提示代码是:
Invalid SQL: ……
MySQL 错误!: (Cant open file: ×××MYI (errno: ))
解决这个问题有多种方案如果你的数据库可以远程链接或者你可以连接到你的远程服务器桌面并且你的服务器系统刚好是Windows的那么你可以
运行>cmd
然后mysql –h 主机地址 –u 用户名 –p
然后输入密码连接数据库
Use 数据库名称
然后 输入reapair table 出错的表名称回车这样修复一下就可以了参考图片如下
第二种方案假设你只能运行PHP代码那么也很简单写一个php文件链接上数据库把这段代码
Reapair table `表名`
像发送 select * ……一样发送给mysql也是可以的
第三种方案可简单了打开你的myphpadmin选中Cant open file:后面同名的表有个下拉菜单选中项选择修复如图
就ok了
如果你的数据库主机就你一个人用并且你还能控制的话建议你用Mysql自带的修复工具myisamchkexe进行修复操作如下
修复前将mysql服务停止
如果是Win主机打开命令行方式然后进入到mysql的/bin目录
执行myisamchk r 数据库所在路径\*MYI
如果是类Unix主机直接使用myisamchk r 数据库目录\*MYI
其它参考
Mysql有的时候因为掉电或者其他原因导致数据库损坏错信息如下
MySql: Cant open file: sdb_sessionsMYI (errno: )
For more information see Help and Support Center at
我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如
检查优化并修复所有的数据库用:
# mysqlcheck A o r p
Enter password:
guestbooksimpgb_avatars OK
guestbooksimpgb_bad_words OK
guestbooksimpgb_banlist OK
guestbooksimpgb_data OK
mysqlcheck语法/html/Program/Mssql//l
修复指定的数据库用
# mysqlcheck A o r Database_NAME p
IXDBANET社区论坛
另外如果只是对某个表进行修复可以用myisamchk或isamchk
其中myisamchk适用于MYISAM类型的数据表而isamchk适用于ISAM类型的数据表这两条命令的主要参数相同一般新的系统都使用MYISAM作为缺省的数据表类型这里以myisamchk为例子进行说明当发现某个数据表出现问题时可以使用
myisamchk tablenameMYI
进行检测如果需要修复的话可以使用
myisamchk of tablenameMYI
关于myisamchk的详细参数说明可以参见它的使用帮助需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉
另外可以把下面的命令放在你的rclocal里面启动MySQL服务器前
[ x /tmp/mysqlsock ] && /pathtochk/myisamchk of /DATA_DIR/*/*MYI
其中的/tmp/mysqlsock是MySQL监听的Sock文件位置对于使用RPM安装的用户应该是/var/lib/mysql /mysqlsock对于使用源码安装则是/tmp/mysqlsock可以根据自己的实际情况进行变更而pathtochk则是 myisamchk所在的位置DATA_DIR是你的MySQL数据库存放的位置