我注意到我的一台服务器由于 MySQL 使用量过大而磁盘空间不足。我停止了所有使用该数据库的操作,释放了一些空间并重新启动了 mysqld。
现在,我检查了我的表格CHECK TABLE table
并得到了以下信息:
+-------------------+-------+----------+---------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------------+-------+----------+---------------------------------------------------------------+
| db.table | check | warning | Table is marked as crashed and last repair failed |
| db.table | check | warning | 1 client is using or hasn't closed the table properly |
| db.table | check | warning | Size of indexfile is: 8656211968 Should be: 1024 |
| db.table | check | error | Size of datafile is: 3068555264 Should be: 3068558490 |
| db.table | check | error | Corrupt |
+-------------------+-------+----------+---------------------------------------------------------------+
我该如何修复?简单地运行“修复表”不起作用,我试过了,但它从未完成(18 小时后被杀死)。我该如何保存数据?
答案1
您的表已崩溃。这种情况发生在非事务性数据库(如 MyISAM)中。如果您不需要全文搜索,请考虑迁移到 InnoDB。
无论如何,你必须修复它,没有其他办法。在 shell 中尝试以下操作来修复所有表:
#myisamchk --force --fast --update-state /path/to/your/database/*.MYI