mysql表损坏:table marked as crashed and should be repaired
今天一台Windows的系统日志报了一长串的错误日志信息,每隔几秒就报一次。看了一下,都是一样的:
以下是使用MYSQL的自带工具myisamchk的解决办法:
a.myisamchk -c -r filename,失败
b.使用safe模式,失败
c.safe模式追加force参数,成功
这张表的数据量比较大,有1800多万,现在已经正常。 附myisamchk的使用方法:
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