`

Mysql 出现 Table ‘xxx’ is marked as crashed and should be repaired 问题

 
阅读更多

解决数据库 Table ‘xxx’ is marked as crashed and should be repaired 错误的参考

1. 进入管理mysql的phpmyadmin
2. 在左则选中自己的数据库
3. 在右则勾选中错误信息中的那个’xxx’表
4. 滚动屏幕到下面,有个下拉菜单(With selected:),选择”Repair table”

修改之后,并没有发现有什么数据损失,连忙备份了一份数据库到邮件里面,备份还是很重要的!

(二)
现象:
mysql> use yourealcn
Database changed
mysql> select user,company from biz_user where commend='1' order by regtime desc,checked desc limit 0,5;
ERROR 145 (HY000): Table './yourealcn/biz_user' is marked as crashed and should be repaired
mysql> exit

使用命令myisamchk修复数据库的MYI文件即可

# /usr/local/mysql5/bin/myisamchk -c -r /bak/lib/mysql/yourealcn/biz_user.*
myisamchk: error: '/bak/lib/mysql/yourealcn/biz_user.frm' is not a MyISAM-table

---------

myisamchk: error: '/bak/lib/mysql/yourealcn/biz_user.MYD' is not a MyISAM-table

---------

- recovering (with sort) MyISAM-table '/bak/lib/mysql/yourealcn/biz_user.MYI'
Data records: 20414
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4

(三)
Caused by: java.sql.SQLException: Table '表名' is marked as crashed and should be repaired
解决办法:
./myisamchk -c -r 数据库表MYI文件的路径(例如:/home/mysql/var/crawlerfeedsky/aaaa.MYI)
如果还不行,就-f 强制修复

(四)
今天上服务器一看,发现网页错误,无法连接数据库服务器。mysql服务自己down掉了,然后重新启动服务器,发现网页无法打开,提示: [mysql]Table tblName is marked as crashed and should be repaired
Mysql提示tblName表格已损坏,需要修复,解决方法:
进入到对应的数据库目录:
cd /var/lib/mysql/dbname
使用myisamchk修复:
shell> myisamchk -r tblName

(五)
我用的修复命令是:myisamchk -r bbsthreads
其中bbsthreads是我出问题的表名,当然使用这个命令还得进入mysql你所出问题的数据库的表的存放路径,具体更详细的命令可以看帮助:myisamchk --help;
如果用以上命令你不能解决问题请看后面,后面的内容是我转载的。

我的网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为:

Table '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired

提示说cms的文章表dede_archives被标记有问题,需要修复。于是赶快恢复历史数据,上网查找原因。最终将问题解决。解决方法如下:

找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

然后myisamchk 工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。

问题分析:

1、错误产生原因,有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。

问题的编号为145

2、问题解决办法。

当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。
这三种修复方法如下所示:
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName

第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

检查和修复MySQL数据文件
如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:
如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:
mysql> DELETE FROM tblName;
在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。


3、myisamchk工具介绍(见mysql的官方手册)

可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。

调用myisamchk的方法:

shell> myisamchk [options] tbl_name ...
options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk --help得到选项列表。

tbl_name是你想要检查或修复的数据库表。如果你不在数据库目录的某处运行myisamchk,你必须指定数据库目录的路径,因为myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在操作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里执行恢复操作。

如果你愿意,可以用myisamchk命令行命名几个表。还可以通过命名索引文件(用“ .MYI”后缀)来指定一个表。它允许你通过使用模式“*.MYI”指定在一个目录所有的表。例如,如果你在数据库目录,可以这样在目录下检查所有的MyISAM表:

shell> myisamchk *.MYI
如果你不在数据库目录下,可通过指定到目录的路径检查所有在那里的表:

shell> myisamchk /path/to/database_dir/*.MYI
你甚至可以通过为MySQL数据目录的路径指定一个通配符来检查所有的数据库中的所有表:

shell> myisamchk /path/to/datadir/*/*.MYI
推荐的快速检查所有MyISAM表的方式是:

shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
如果你想要检查所有MyISAM表并修复任何破坏的表,可以使用下面的命令:

shell> myisamchk --silent --force --fast --update-state \
-O key_buffer=64M -O sort_buffer=64M \
-O read_buffer=1M -O write_buffer=1M \
/path/to/datadir/*/*.MYI
该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5.9.5.5节,“myisamchk内存使用”。

当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:

warning: clients are using or haven't closed the table properly
这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如mysqld服务器)更新的表。

如果mysqld正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。

From :http://www.discuz.net/home.php?mod=space&do=blog&uid=205926&id=7048

分享到:
评论

相关推荐

    MySQL error code 145 Table was marked as crashed and should be repaired

    在处理MySQL数据库时遇到错误代码145(`Table was marked as crashed and should be repaired`)是一个常见的问题,尤其是在表结构遭到损坏或数据库服务突然中断的情况下。根据提供的部分日志内容可以看出,该错误...

    Table ‘xxx’ is marked as crashed and should be repaired 错误解决方法参考

    在MySQL数据库管理过程中,遇到“Table ‘xxx’ is marked as crashed and should be repaired”这类错误时,往往意味着某个或某些数据库表已经损坏,无法正常读取或使用。这类问题可能会导致数据丢失或者服务中断,...

    Mysql中Table ‘XXX’ is marked as crashed and last (automatic?)问题解决方法

    在使用MySQL数据库的过程中,如果遇到提示“Table ‘XXX’ is marked as crashed and last (automatic?)”,这通常意味着指定的表已经遭受了损坏。在这种情况下,我们可以采取一些步骤来解决这个问题。下面详细地...

    智慧生态环境解决方案 [Repaired].pptx

    智慧环保 环保物联网 水质、大气、土壤等领域的数据共享交换。

    MySQL数据库表修复 MyISAM

    一:MySQL中MyISAM表损坏原因总结: 1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被...3 、Error: Table ‘…’ is marked as crashed and should be repaired 。 4 、打开

    tcp网络调试助手

    5. **拥塞控制**:当网络出现拥塞时,TCP会采取拥塞窗口策略,如慢启动、拥塞避免、快速重传和快速恢复等算法,逐渐增加发送速率,以适应网络的承载能力。 6. **数据分片与重组**:由于网络中可能存在多个路由器,...

    基于Socket 的网络调试助手

    例如,当应用程序无法正常连接服务器时,可以使用助手来排除网络层面的问题,或者在数据传输过程中出现问题时,通过助手查看发送和接收的数据,找出编码或解码的错误。 总的来说,基于Socket的网络调试助手是网络...

    mysql数据库索引损坏及修复经验分享

    首先,MySQL的错误日志中可能会出现类似“Table './dedecmsv4/dede_archives' is marked as crashed and should be repaired”的信息,这表明某个表(如dede_archives)出现了索引损坏。这种情况可能由于数据库...

    mysql修复数据表的命令方法

    当遇到“is marked as crashed and should be repaired”这样的错误提示时,这通常意味着某个数据表在上次关闭时没有正常完成操作,可能丢失了一些数据或结构信息,需要进行修复。 **一、修复所有数据库** 如果...

    shell脚本自动修复mysql损坏的表

    问题描述:最近查看mysql数据库服务器日志,老发现有表损坏的错误日志,比如:120724 7:30:48 [ERROR] /data/soft/mysql/libexec/mysqld: Table ‘./blog/wp_links’ is marked as crashed and last (automatic?...

    数据库MySQL表修复MyISAM

    数据库报错: SQLSTATE[HY000]: General error: 144 Table './db_jiangzi_video/cmf_jiangzi_items' is marked as crashed and last (automatic?) repair failed MySQL数据库表修复 MyISAM

    MYSQL数据表损坏的原因分析和修复方法小结(推荐)

    - 错误提示:“Incorrect key file for table”或“Table is marked as crashed”。 - 查询异常:无法找到数据行,或者返回数据不完整。 - 打开表失败:如“Can't open file”(errno: 145)。 - 数据访问异常:...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... 命令和参数之间必需用空格隔...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    All of a project's header files should be listed as descentants of the project's source directory without use of UNIX directory shortcuts . (the current directory) or .. (the parent directory). For...

    WebBrowserEx

    Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution.

Global site tag (gtag.js) - Google Analytics