【问题标题】:MySQL Error Incorrect key file. myisamchk repair works but table corrupts again soonMySQL 错误 密钥文件不正确。 myisamchk 修复工作,但表很快再次损坏
【发布时间】:2017-11-05 13:15:14
【问题描述】:

我在 stackoverflow 上的第一个问题,所以我希望我已经遵循了所有的指导方针。

我在 Digital Ocean 液滴上有一个带有 MySql 数据库的网站。

我发现 mysql 已经停止运行,并且在查看后发现损坏的表。用myisamchk -r修复它们后,我认为问题已经解决了。然而它一直在发生。我更改了innodb_buffer_pool_size = 20M in my.cnf 并在阅读此MySQL, Error 126: Incorrect key file for table 后在/dev/vda/ 上创建了一些空闲空间@

Filesystem     1K-blocks     Used Available Use% Mounted on
udev              239664        4    239660   1% /dev
tmpfs              50176      380     49796   1% /run
/dev/vda1       20511356 12346408   7099992  64% /
none                   4        0         4   0% /sys/fs/cgroup
none                5120        0      5120   0% /run/lock
none              250872        0    250872   0% /run/shm

我在 mysql/error.log 中有这些错误

[ERROR] /usr/sbin/mysqld: Incorrect key file for table './websitename/wp_options.MYI'; try to repair it
[ERROR] Got an error from thread_id=178, /build/mysql-5.5-heGK82/mysql-5.5-5.5.55/storage/myisam/mi_update.c:226
[ERROR] MySQL thread id 178, OS thread handle 0x7f4544010700, query id 69124 localhost th3489075 Updating

当我在损坏的表上运行myisamchk db_name.MYI 时,我得到了

Checking MyISAM file: wp_options.MYI
Data records:     375   Deleted blocks:       0
myisamchk: warning: Table is marked as crashed
myisamchk: warning: 1 client is using or hasn't closed the table properly
- check file-size    
myisamchk: error: Size of datafile is: 1059228           Should be: 1059276
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check record links
myisamchk: error: Keypointers and record positions doesn't match
myisamchk: warning: Found        375 key parts. Should be: 377
MyISAM-table 'wp_options.MYI' is corrupted
Fix it using switch "-r" or "-o"

使用myisamchk -r or -o 选项修复表似乎可以在报告没有问题后立即运行myisamchk *.MYI,但稍后它会返回上述错误。

我有各种数据库备份,但不确定它们与当前备份有多大不同。

我了解警告 myisamchk: warning: 1 client is using or hasn't closed the table properly 如果 mysql 正在运行,则会发生。

当 mysql 停止时myisamchk *.MYI 报告一切正常,但 mysql 仍然崩溃。

【问题讨论】:

    标签: mysql myisam


    【解决方案1】:

    每次出现电源故障或 mysqld 的其他突然终止时,MyISAM 表可能被损坏。这是切换到 InnoDB 的一个强有力的理由,它可以更好地保护自身并在重启时自动修复。

    同时,您可以尝试 OPTIMIZE TABLE 作为强制重建表的一种方式。这可能会或可能不会丢失似乎丢失的数据,但它可能会在下一次崩溃之前消除错误消息。

    【讨论】:

    • 谢谢 Rick,是的,我听说 Innodb 更健壮,未来需要牢记这一点。今天和一个朋友聊天,他建议转储数据库并导入它。到目前为止,这运行没有错误。我还要记住 OPTIMIZE TABLE 方法。
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 2016-12-27
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多