在 Debian 上修复 MySQL / MariaDB 损坏,通常分为服务无法启动、数据文件损坏、表损坏几种情况。下面按常见场景给你一套可操作的修复思路(以 Debian + MySQL 5.7/8.0 或 MariaDB 为例)。
systemctl status mysql
journalctl -xe
常见错误:
InnoDB: Database page corruptionTable './xxx/yyy' is marked as crashedCan't connect to local MySQL servermysqld_safe --skip-grant-tables &
如果能启动,说明是权限或配置问题。
vim /etc/mysql/my.cnf
或
vim /etc/mysql/mysql.conf.d/mysqld.cnf
确认:
ls -ld /var/lib/mysql
cp -a /var/lib/mysql /var/lib/mysql.bak
编辑配置文件:
[mysqld]
innodb_force_recovery = 1
从 1 到 6 逐级尝试(数字越大越激进):
innodb_force_recovery = 4
然后:
systemctl restart mysql
✅ 能启动后立即导出数据:
mysqldump -uroot -p --all-databases > all.sql
⚠️ innodb_force_recovery > 0 时 禁止写入
systemctl stop mysql
mv /var/lib/mysql /var/lib/mysql.old
mkdir /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
mysql_install_db
systemctl start mysql
再导入:
mysql < all.sql
CHECK TABLE 表名;
REPAIR TABLE 表名;
或命令行:
myisamchk -r /var/lib/mysql/库名/表名.MYI
Debian 默认可能是 MariaDB:
systemctl restart mariadb
修复命令:
mysqlcheck -r --all-databases -u root -p
# 检查所有表
mysqlcheck -c --all-databases
# 修复所有表
mysqlcheck -r --all-databases
# 分析优化
mysqlcheck -a -o --all-databases
innodb 而非 myisammysqldump -uroot -p --all-databases > backup.sql
如果你愿意,可以把 具体报错信息 或 journalctl -xe 的输出贴出来,我可以帮你精准判断是哪一种损坏。