在 Ubuntu 上,MySQL 表损坏常见于 MyISAM 表(InnoDB 一般不会“坏”,多为配置或崩溃问题)。下面按场景给你一套实用修复方案。
登录 MySQL:
mysql -u root -p
查看表引擎:
USE 数据库名;
SHOW TABLE STATUS LIKE '表名';
看 Engine 字段:
REPAIRREPAIR TABLE检查错误日志:
sudo tail -n 100 /var/log/mysql/error.log
REPAIR TABLE 表名;
强制修复(更严重损坏):
REPAIR TABLE 表名 USE_FRM;
先停止 MySQL(可选但更安全):
sudo systemctl stop mysql
使用 myisamchk:
cd /var/lib/mysql/数据库名
myisamchk -r 表名.MYI
严重损坏:
myisamchk -o 表名.MYI
修复后启动:
sudo systemctl start mysql
InnoDB 一般不是表坏,而是:
直接重启 MySQL:
sudo systemctl restart mysql
InnoDB 会尝试自动恢复。
编辑配置:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
添加:
[mysqld]
innodb_force_recovery = 1
(1~6 逐级尝试,只用最小能启动的值)
启动 MySQL 后 立刻导出数据:
mysqldump -u root -p 数据库名 > backup.sql
然后:
innodb_force_recoverymysqlcheck -u root -p --auto-repair --check --optimize 数据库名
所有数据库:
mysqlcheck -u root -p --auto-repair --all-databases
mysqldump -u root -p --all-databases > all.sql
如果你愿意,可以告诉我:
我可以直接给你针对性的修复命令。