mysql表损坏:table marked as crashed and should be repaired

今天一台Windows的系统日志报了一长串的错误日志信息,每隔几秒就报一次。看了一下,都是一样的:
Failed to write to mysql.general_log: 
Table 'general_log' is marked as crashed and should be repaired
进入数据库查看的时候就一直hang在那里,这个表是记录系统性能用的,之前跑了一个脚本专门往里面塞系统性能日志信息,表面看来表已经损坏,需要修复一下。修复之前原想备份一下,但是备份不成功,分析了下这个表,是个myisam引擎数据,另外存放的统计数据丢失也不要紧,故直接修复 

以下是使用MYSQL的自带工具myisamchk的解决办法: 
a.myisamchk -c -r filename,失败 
 

b.使用safe模式,失败 
 

c.safe模式追加force参数,成功 
 

这张表的数据量比较大,有1800多万,现在已经正常。 附myisamchk的使用方法:
F:\mysql\bin>myisamchk --help
myisamchk  Ver 2.7 for Win64 at x86
By Monty, for your professional use
This software comes with NO WARRANTY: see the PUBLIC for details.

Description, check and repair of MyISAM tables.
Used without options all tables on the command will be checked for errors
Usage: myisamchk [OPTIONS] tables[.MYI]

Global options:
  -H, --HELP          Display this help and exit.
  -?, --help          Display this help and exit.
  -t, --tmpdir=path   Path for temporary files. Multiple paths can be
                      specified, separated by semicolon (;), they will be used
                      in a round-robin fashion.
  -s, --silent        Only print errors.  One can use two -s to make
                      myisamchk very silent.
  -v, --verbose       Print more information. This can be used with
                      --description and --check. Use many -v for more verbosity.

  -V, --version       Print version and exit.
  -w, --wait          Wait if table is locked.

Check options (check is the default action for myisamchk):
  -c, --check         Check table for errors.
  -e, --extend-check  Check the table VERY throughly.  Only use this in
                      extreme cases as myisamchk should normally be able to
                      find out if the table is ok even without this switch.
  -F, --fast          Check only tables that haven't been closed properly.
  -C, --check-only-changed
                      Check only tables that have changed since last check.
  -f, --force         Restart with '-r' if there are any errors in the table.
                      States will be updated as with '--update-state'.
  -i, --information   Print statistics information about table that is checked.
  -m, --medium-check  Faster than extend-check, but only finds 99.99% of
                      all errors.  Should be good enough for most cases.
  -U  --update-state  Mark tables as crashed if you find any errors.
  -T, --read-only     Don't mark table as checked.

Repair options (When using '-r' or '-o'):
  -B, --backup        Make a backup of the .MYD file as 'filename-time.BAK'.
  --correct-checksum  Correct checksum information for table.
  -D, --data-file-length=#  Max length of data file (when recreating data
                      file when it's full).
  -e, --extend-check  Try to recover every possible row from the data file
                      Normally this will also find a lot of garbage rows;
                      Don't use this option if you are not totally desperate.
  -f, --force         Overwrite old temporary files.
  -k, --keys-used=#   Tell MyISAM to update only some specific keys. # is a
                      bit mask of which keys to use. This can be used to
                      get faster inserts.
  --max-record-length=#
                      Skip rows bigger than this if myisamchk can't allocate
                      memory to hold it.
  -r, --recover       Can fix almost anything except unique keys that aren't
                      unique.
  -n, --sort-recover  Forces recovering with sorting even if the temporary
                      file would be very big.
  -p, --parallel-recover
                      Uses the same technique as '-r' and '-n', but creates
                      all the keys in parallel, in different threads.
  -o, --safe-recover  Uses old recovery method; Slower than '-r' but can
                      handle a couple of cases where '-r' reports that it
                      can't fix the data file.
  --character-sets-dir=...
                      Directory where character sets are.
  --set-collation=name
                      Change the collation used by the index.
  -q, --quick         Faster repair by not modifying the data file.
                      One can give a second '-q' to force myisamchk to
                      modify the original datafile in case of duplicate keys.
                      NOTE: Tables where the data file is currupted can't be
                      fixed with this option.
  -u, --unpack        Unpack file packed with myisampack.

Other actions:
  -a, --analyze       Analyze distribution of keys. Will make some joins in
                      MySQL faster.  You can check the calculated distribution
                      by using '--description --verbose table_name'.
  --stats_method=name Specifies how index statistics collection code should
                      treat NULLs. Possible values of name are "nulls_unequal"
                      (default for 4.1/5.0), "nulls_equal" (emulate 4.0), and
                      "nulls_ignored".
  -d, --description   Prints some information about table.
  -A, --set-auto-increment[=value]
                      Force auto_increment to start at this or higher value
                      If no value is given, then sets the next auto_increment
                      value to the highest used value for the auto key + 1.
  -S, --sort-index    Sort index blocks.  This speeds up 'read-next' in
                      applications.
  -R, --sort-records=#
                      Sort records according to an index.  This makes your
                      data much more localized and may speed up things
                      (It may be VERY slow to do a sort the first time!).
  -b,  --block-search=#
                       Find a record, a block at given offset belongs to.

Default options are read from the following files in the given order:
C:\WINDOWS\my.ini C:\WINDOWS\my.cnf C:\my.ini C:\my.cnf F:\mysql\my.ini F:\mysql
\my.cnf
The following groups are read: myisamchk
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.

Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- ----------------------------------------
character-sets-dir                (No default value)
data-file-length                  0
keys-used                         18446744073709551615
max-record-length                 9223372036854775807
set-auto-increment                0
set-collation                     (No default value)
sort-records                      0
tmpdir                            (No default value)
key-buffer-size                   520192
key-cache-block-size              1024
myisam-block-size                 1024
read-buffer-size                  262136
write-buffer-size                 262136
sort-buffer-size                  2097144
sort-key-blocks                   16
decode-bits                       9
ft-min-word-len                   4
ft-max-word-len                   84
ft-stopword-file                  (No default value)
stats-method                      nulls_unequal


原文地址:http://my.oschina.net/Kenyon/blog/55790
300*300
 文章首页关于迷茫时代关于我写意人生
版权所有:迷茫时代 All rights reserved   
执行时间:0.00627 秒