加入收藏 | 设为首页 | 会员中心 | 我要投稿 濮阳站长网 (https://www.0393zz.cn/)- 专属主机、数据湖、操作系统、媒体智能、数据分析!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL myisamchk修复正在使用,无法访问数据表

发布时间:2022-06-18 08:41:11 所属栏目:MySql教程 来源:互联网
导读:昨天由于机房掉电自己的mysql数据库中大量表都出现了无法访问或正使用的情况,后来查了可以使用mysql myisamchk命令进行修复,下面我来介绍一下. Posted on December 31, 2009 by axl MyISAM是MySQL的预设storage engine. MyISAM table很容易烂掉(corrupted)。
  昨天由于机房掉电自己的mysql数据库中大量表都出现了无法访问或正使用的情况,后来查了可以使用mysql myisamchk命令进行修复,下面我来介绍一下.
 
  Posted on December 31, 2009 by axl MyISAM是MySQL的预设storage engine. MyISAM table很容易烂掉(corrupted)。
 
  此文章将教你如何检查/修复这些烂掉的MyISAM tables.
 
  每次你在MySQL DB 制造一个 table,将会在档案系统上同时制造出*.frm、*.MYD,跟*.MYI等三种格式的档案.
 
  *.frm = 用来储存资料表格式(file to store table format)
 
  *.MYD(MyData) = 用来储存资料(file to store data)
 
  *.MYI(MyIndex) =用来储存索引(file to store index)
 
  如何检查DB?哪个table 需要修复,用root 执行以下指令,假设要检查DB1下的各个table,代码如下:
 
  #myisamchk /var/lib/mysql/DB1/*.MYI >> /tmp/myisamchk.log
 
  萤幕输出中,如果发现以下字样,该资料表就应修复.
 
  myisamchk: error: Keypointers and record positions doesn’t match
  MyISAM-table ‘/var/lib/mysql/DB1/news_post_comment.MYI’ is corrupted
  Fix it using switch “-r” or “-o”
  myisamchk: warning: 1 client is using or hasn’t closed the table properly
  MyISAM-table ‘/var/lib/mysql/DB1/news_post.MYI’ is usable but should be fixed
  myisamchk: warning: 1 client is using or hasn’t closed the table properly
  MyISAM-table ‘/var/lib/mysql/DB1/news_post_push_log.MYI’ is usable but should be fixed
  Redirect出来的档案中会显示更多资讯,代码如下:
 
  Checking MyISAM file: /var/lib/mysql/DB1/yam_bbauth.MYI
  Data records: 14 Deleted blocks: 0
  - check file-size
  - check record delete-chain
  - check key delete-chain
  - check index reference
  - check data record references index: 1
  - check record links
  如何利用myisamchk修复烂掉的tables,找出烂掉的table之后,用以下指令修复,代码如下:
 
   #myisamchk –r /var/lib/mysql/DB1/news_post_comment.MYI  
  - recovering (with sort) MyISAM-table ‘/var/lib/mysql/DB1/news_post_comment.MYI
  Data records: 1
  - Fixing index 1
  如果table正被某个application使用,你可能会看到,clients are using or haven’t closed the table properly.
 
  所以建议修复前将mysqld关掉或用FLUSH TABLES锁住TABLES,防止修复时有application对DB TABLE做更动.
 
  如何让检查跟修复同时进行,代码如下:
 
   #myisamchk --silent --force --fast --update-state /var/lib/mysql/DB1/*.MYI  
  myisamchk: MyISAM file /var/lib/mysql/DB1/groups.MYI
  myisamchk: warning: 1 client is using or hasn’t closed the table properly
  myisamchk: MyISAM file /var/lib/mysql/DB1/profiles.MYI
  myisamchk: warning: 1 client is using or hasn’t closed the table properly
  --options 的意义如下:
  • s, –silent option: Prints only errors. You can use two -s to make myisamchk very silent.
  • -f, –force option: Restart myisamchk automatically with repair option -r, if there are any errors in the table.
  • -F, –fast option: Check only tables that haven’t been closed properly.
  • -U –update-state option: Marks tables as crashed, when it finds any error.
  修复时手动分配记忆体给庞大的DB,庞大的table,修复需要很长的时间,修复时可以手动增加记忆体参数,代码如下:
 
  # myisamchk --silent --force --fast --update-state --key_buffer_size=512M --sort_buffer_size=512M  
  -read_buffer_size=4M --write_buffer_size=4M /var/lib/mysql/DB1/*.MYI  
  用myisamchk 获取table资讯,代码如下:
 
  #myisamchk -dvv profiles.MYI  
  MyISAM file: profiles.MYI
  Record format: Packed
  Character set: latin1_swedish_ci (8)
  File-version: 1
  Creation time: 2007-08-16 18:46:59
  Status: open,changed,analyzed,optimized keys,sorted index pages
  Auto increment key: 1 Last value: 88
  Data records: 88 Deleted blocks: 0
  Datafile parts: 118 Deleted data: 0
  Datafile pointer (bytes): 4 Keyfile pointer (bytes): 4
  Datafile length: 6292 Keyfile length: 6144
  Max datafile length: 4294967294 Max keyfile length: 4398046510079
  Recordlength: 2124
  table description:
  Key Start Len Index Type Rec/key Root Blocksize
  1 2 3 unique int24 1 1024 1024
  2 5 765 unique char packed stripped 1 2048 4096
  Field Start Length Nullpos Nullbit Type
  1 1 1
  2 2 3 no zeros
  3 5 765 no endspace
  最后一招:#myisamchk --help,MySQL 使用 myisamchk 修复 *.MYI 时,出现下述讯息:
 
  myisamchk: Disk is full writing '/tmp/ST3lJjsW' (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to c ontinue after freeing disk space)
  myisamchk: Retry in 60 secs. Message reprinted in 600 secs
  解法1:
 
  ■由讯息可以知道, myisamchk 需要使用到 /tmp,/tmp 容量不够就会出现此讯息,所以如果 /tmp 可以清出空间,清出 /tmp 的空间就可以解决了,但是如果 /tmp 本身切的就不够大,可以使用下述解法.
 
  解法2:此解法取自: free disk space error using myisamchk
 
  ■myisamchk -rq --sort_buffer_size=256M --key_buffer_size=256M --read_buffer_size=32M --write_buffer_size=32M --sort-index --analyze --tmpdir=/more-disk-space-directory/ /var/lib/mysql/database/T1.MYI
 
  ■?: 修改 --tmpdir=/more-disk-space-directory/ 指定到空间比较大的地方去即可.

(编辑:濮阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读