Discuz模板|Discuz插件|Discuz教程|Discuz素材免费下载

 找回密码
 立即注册

QQ登录

只需一步,快速开始

广告
温馨提示:本站所有DZ相关模板、插件、教程(包括DZ应用中心已下架插件、模板)所有用户可全部免费下载,无任何收费模式(不包括VIP版块非DZ资源,VIP版块需购买会员组方可下载),如本站没有您需要的插件或模板,请自行前往淘宝互站网送吗网等第三方站点搜索相关插件或模板进行低价格购买下载本站非常不建议用户浪费金钱前往DZ应用中心购买。

MYSQL 修复表 提示:is marked as crashed and should be repaired

[复制链接]
tuyuanma 发表于 2015-7-20 10:14:29 | 显示全部楼层 |阅读模式
温馨提醒:禁止内容附带广告图片、二维码图片,否则将在不通知情况下永久禁言账号!
欢迎加入兔源码站长交流群,您的加入是我们前行的动力!

DZ站长建站交流群:493651246

[ 温馨提示:点击上方群文字,可快速加入QQ群 ]


(145) Table '.\common_member_status' is marked as crashed and should be repaired                0 ^2 j$ x, {7 L- K* N
SELECT * FROM common_member_status WHERE `uid`='79080'

" i( E& U3 A7 |! r
这些东西都是从其他地方找来的一些解决MYSQL数据库这个错误的方法,并不一定适用于神迹数据库,仅仅供参考一下,具体的解决方法还是需要摸索。也可能其中任意方法都可以适用于本数据库。我暂时没有条件测试,有条件的去测试一下,有望解决数据库报此错误的问题。
) I' N; o! L$ B' _, O! }8 o2 [
" [5 O# h) N/ q0 L
$ J& U/ R( ?6 q6 h+ u(一)( _8 [" K' {! @
昨晚浏览自己的Blog的时候,突然发现所有页面都无法显示,到后台查看的时候,发现一个”Table ‘xxx’ is marked as crashed and should be repaired” 的错误。连忙上网搜索,原来修改这个严重的错误很简单:
$ x# {2 a" E; l4 D
0 E% v" R$ C  G! \% `& o5 Y% ^1. 进入管理mysql的phpmyadmin
) ~' S1 s9 C; O, V6 [# P' L2. 在左则选中自己的数据库- N2 N. N; M/ J3 m3 H& D
3. 在右则勾选中错误信息中的那个’xxx’表' |# Y- e- g6 C; c
4. 滚动屏幕到下面,有个下拉菜单(With selected,选择”Repair table”
实质就是执行命令:repair table tablename
7 g! V# s- l. j5 U

7 F! @+ L2 L0 Y& q: Y& Z( i1 V修改之后,并没有发现有什么数据损失,连忙备份了一份数据库到邮件里面,备份还是很重要的!
6 S* `9 d& a& m# O' Z5 N1 z; i
6 E8 m1 _3 E& h6 z$ _(二)
/ G% a0 q/ h5 z4 X8 z: i现象:
" @* X  B! Z) D$ pmysql> use yourealcn
) k6 b2 H4 E% fDatabase changed
6 C. p$ Y. i, M. {mysql> select user,company from biz_user where commend='1' order by regtime desc,checked desc limit 0,5;4 x# s9 o6 T$ e) A! `- Y
ERROR 145 (HY000): Table './yourealcn/biz_user' is marked as crashed and should be repaired+ w( v5 t# q3 W" t
mysql> exit
: D" \/ |0 j3 d& u& U: X+ P* e5 z' s
! S& L! m6 A1 H; x使用命令myisamchk修复数据库的MYI文件即可
8 a2 a: d3 Z6 f) `" a  ^: c2 i' ?! j( k2 _' S7 q7 Z% A
# /usr/local/mysql5/bin/myisamchk -c -r /bak/lib/mysql/yourealcn/biz_user.*- }8 O0 t# @3 U# c+ ^
myisamchk: error: '/bak/lib/mysql/yourealcn/biz_user.frm' is not a MyISAM-table" t/ X( N. a# d4 p; ~4 ?
* m4 e3 {: V. R5 g  v1 S
---------, o/ e7 w3 ^  u. \

9 x# v/ E* n! w7 `! w( t$ a  mmyisamchk: error: '/bak/lib/mysql/yourealcn/biz_user.MYD' is not a MyISAM-table
3 z& C6 a2 g$ ?) o+ H. T# Y' X0 x
---------1 l2 J/ Q8 l" b- L

( x) _  H' T! o3 X- recovering (with sort) MyISAM-table '/bak/lib/mysql/yourealcn/biz_user.MYI'" h" Q2 U/ i8 A
Data records: 20414
! P0 U9 _" D3 V5 @! X/ `% H- Fixing index 10 t# `! x6 I" O
- Fixing index 26 m/ Y/ v: E9 n: o) H
- Fixing index 3
$ c' V' q$ H/ z/ d) A- Fixing index 49 ?/ ~9 V- m) S0 E! w" s4 e

8 x0 ]7 g% L- o1 q+ ~(三)
+ Q+ A8 q' a- t' YCaused by: java.sql.SQLException: Table '表名' is marked as crashed and should be repaired: k7 ]+ ?5 o# {+ j) ?$ c# I. ]8 K; W
解决办法:
7 C  n6 K( O8 w./myisamchk -c -r 数据库表MYI文件的路径(例如:/home/mysql/var/crawlerfeedsky/aaaa.MYI)
7 D' }+ u% r8 s9 B1 ]如果还不行,就-f 强制修复  
( u; m6 P5 R( `9 r. \% }6 s8 g& w1 P7 m0 D( I+ L/ Q3 N
(四), ^( p2 l5 `0 j
今天上服务器一看,发现网页错误,无法连接数据库服务器。mysql服务自己down掉了,然后重新启动服务器,发现网页无法打开,提示: [mysql]Table tblName is marked as crashed and should be repaired; ^, d9 ^: l# u% l# K; w. C
Mysql提示tblName表格已损坏,需要修复,解决方法:
  V9 g- ?8 ^; d0 K, p进入到对应的数据库目录:6 x. h3 o% K4 F+ K
cd /var/lib/mysql/dbname
1 k3 Y6 E9 B; J6 F! x' |使用myisamchk修复:
+ j( B7 Z  l- C: `shell> myisamchk -r tblName
5 l; M: J; P! s  g4 X- p: i9 D
+ u7 X  k+ h: v& v* x(五)$ g+ j" X5 ?' b* P
我用的修复命令是:myisamchk -r bbsthreads& P' s1 l  t' d8 t8 u
其中bbsthreads是我出问题的表名,当然使用这个命令还得进入mysql你所出问题的数据库的表的存放路径,具体更详细的命令可以看帮助:myisamchk --help;
7 B- a6 N! U4 P9 g如果用以上命令你不能解决问题请看后面,后面的内容是我转载的。- L2 t# d. F. v& L$ H

8 ~* ^" |  F9 C- r2 h: @9 O1 j' t0 O我的网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为:
5 z( j) y) Y. f( @: i5 g5 J
  W. B- q, j: m5 p$ qTable '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired9 r) n3 [; Y% `6 ~. Q( M* @! k

2 E, T: h6 M2 o% B/ L# o提示说cms的文章表dede_archives被标记有问题,需要修复。于是赶快恢复历史数据,上网查找原因。最终将问题解决。解决方法如下:4 |* A& f$ y# g+ |& f  l& f

$ X/ F& \$ F. P/ o找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:( T: M% N" ?. S; O
9 r5 Z4 p2 _" l/ t
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
5 G; J& w$ K4 u5 `% b/ H$ ]
" t. v+ i. H, _/ T) |  r然后myisamchk 工具会帮助你恢复数据表的索引。重新启动mysql,问题解决。. k4 B8 \8 N. C7 O" B: I( F
- i: g% Q- E* J6 i4 t
问题分析:
% g4 B4 Q; k# m0 X
5 P; N( z2 ~8 e: k+ r9 v1、错误产生原因,有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。6 J/ b0 c) A/ M' c9 \
+ T" a& M# }. C
问题的编号为145. g9 h8 k/ U5 E

$ J, M" \) N# Y, s# \2、问题解决办法。  l: Q1 ~# A1 u0 e' v' y, g! l

& ~, z+ O- R! D8 h; J# H& R- B  k( V* Z当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。! t, X& A5 ], ~/ b/ K- r- Y/ r# w0 M$ T
这三种修复方法如下所示:
# }$ n  l2 c) ^6 g; `4 Y% myisamchk --recover --quick /path/to/tblName
! a3 b- y! T3 |; j$ v3 p$ j! [% myisamchk --recover /path/to/tblName
! j  K  `/ Q5 h% myisamchk --safe-recover /path/to/tblName
% D' j0 ~* p" D+ ~" t) C0 ^3 u9 e: p& y% w
第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。
0 w0 j; d4 k& ~6 t  b6 j/ B, Q: u2 M5 r) K" E' F
检查和修复MySQL数据文件
8 A* z& s' h/ I. I$ d/ {" p' m; X如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:
6 b" v' k. o- i* ?* G% O" m如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:6 g5 g6 O2 u% k/ \3 S+ U7 j# q
mysql> DELETE FROM tblName;. {) s6 z6 W+ I
在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。0 M2 x. C/ S1 m/ z# N1 I  H( K
, g1 X( x. z) G1 V/ @( `3 T
如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。
2 C; k8 ]2 d1 {! E$ M9 q0 K6 `& `5 F9 c: d/ }- c) R
启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。
0 _% M8 R+ I- I% w, ?- G  d1 }( J! F0 J) ^/ Z6 h5 i

3 U, T2 \6 t$ h1 I- |9 B# N3、myisamchk工具介绍(见mysql的官方手册)
2 f- E0 x. O2 z9 a
5 r% z/ i) R% Z# T: ]可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。
9 ^6 T. C, ]6 I% u
+ R- _# {7 o7 h- D$ n6 j调用myisamchk的方法:4 ~8 D; V! o. }1 n# ]

; Q. m3 o( h. T: r, }shell> myisamchk [options] tbl_name ...! i- v. i3 c* W6 M& C3 v) p
options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk --help得到选项列表。% E) F9 H! m& B7 c) r
6 Y6 S7 Y3 }% y) k! ^4 V- I
tbl_name是你想要检查或修复的数据库表。如果你不在数据库目录的某处运行myisamchk,你必须指定数据库目录的路径,因为 myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在操作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里执行恢复操作。
3 B5 m/ @8 u* D( j, f
# \& ^4 V8 W& P1 J4 [如果你愿意,可以用myisamchk命令行命名几个表。还可以通过命名索引文件(用“ .MYI”后缀)来指定一个表。它允许你通过使用模式“*.MYI”指定在一个目录所有的表。例如,如果你在数据库目录,可以这样在目录下检查所有的MyISAM表:
8 f/ d. _4 s6 K1 Z( L3 a8 Z  P
- `+ ]. x3 W0 \: n. U& Sshell> myisamchk *.MYI+ l  c6 ^; b; Q8 K- x1 _* ^8 R2 b
如果你不在数据库目录下,可通过指定到目录的路径检查所有在那里的表:
% P8 t4 v+ n. o$ b* Z% a& h) {& u$ B9 s
shell> myisamchk /path/to/database_dir*.MYI6 Y: T% k% a+ B2 I" R  h/ _
推荐的快速检查所有MyISAM表的方式是:
  B9 v$ i$ V- U  R
; ^7 f5 a; |" d, qshell> myisamchk --silent --fast /path/to/datadir*.MYI
! b5 W  E8 F3 H  B该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5.9.5.5节,“myisamchk内存使用”。. F- t' @4 `* P7 [: s1 j% r
+ d1 R) k8 T0 f$ X
当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:
; A6 c7 O9 _) c( l  s3 v) n' x+ N
warning: clients are using or haven't closed the table properly1 n0 F7 ^6 E* F( D$ r7 n
这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如mysqld服务器)更新的表。$ A0 W/ k  J; K5 w1 @' f) A

" V  e) e: N2 A7 g; ?如果mysqld正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。
/ R: C2 T& J; w/ n( d  r+ [4 P

版权声明
1、转摘或引用本站内容资源须注明原网址,并标明本站网址(兔源码www.tuyuanma.com);
2、对于转摘或引用本站内容资源而引起的民事纠纷、行政处罚或其他损失,本站不承担责任;
3、对于不遵守本声明或其他违法、恶意使用本站内容者,本站保留其追究法律责任的权利。




自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广告

兔源码网 (公网安备36112102000036号 赣ICP备17001544号)

兔源码 QQ交流群:493651246  GMT+8, 2020-1-18 02:33
←站长统计工具 查看密码:tuyuanma

兔源码DZ模板下载 站长邮箱:tuyuanma@qq.com 站长QQ:3197813386 网站地图

© 2001-2013 本站内容皆来自互联网及用户分享,如需删除请提供软著或商标证书。

     
快速回复 返回顶部 返回列表