在 Ubuntu 上修复 MySQL(或 MariaDB)损坏的表,常见方法如下,按使用场景从简单到进阶说明。
不同引擎修复方式不同:
SHOW TABLE STATUS LIKE '表名';
mysql -u root -p
USE 数据库名;
REPAIR TABLE 表名;
强制修复(表损坏严重时):
REPAIR TABLE 表名 USE_FRM;
先停止 MySQL
sudo systemctl stop mysql
进入数据目录(路径可能不同):
cd /var/lib/mysql/数据库名
修复表:
myisamchk -r 表名.MYI
严重损坏时:
myisamchk -o 表名.MYI
修复完成后启动 MySQL:
sudo systemctl start mysql
编辑配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
添加:
[mysqld]
innodb_force_recovery = 1
依次尝试 1 → 6(数字越大越激进,不要长期开启)
重启:
sudo systemctl restart mysql
能导出数据后,重建表:
ALTER TABLE 表名 ENGINE=InnoDB;
最后移除 innodb_force_recovery
mysql -u root -p 数据库名 < 备份.sql
mysqlcheck -u root -p --auto-repair 数据库名
修复所有数据库:
mysqlcheck -u root -p --auto-repair --all-databases
sudo chown -R mysql:mysql /var/lib/mysql
如果你能告诉我:
我可以给你更精确的修复步骤。