介绍
MySQL 提供了几种不同的方法来分析和修复数据库。出现错误和异常的原因有很多,其中一些包括:
MySQL 更新或降级。
索引或数据的快速变化。
表不一致。
检查损坏的数据和修复表时,修复错误所采取的步骤取决于您连接到数据库的方式、数据库服务器状态、错误类型和使用的数据库引擎。
本文向您展示了多种排除和修复 MySQL 数据库的方法。
如何修复 MySQL 数据库
先决条件
具有 root 权限的终端或命令行。
安装并配置了MySQL 8.0 版。
损坏的数据库或数据库表。
如何检查 MySQL 表是否有错误
运行诊断是对问题进行故障排除的第一步。有两种方法可以检查MySQL 表是否有错误:
通过 MySQLCHECK TABLE查询。
使用终端程序mysqlcheck。
使用 CHECK TABLE 检查表
该CHECK TABLE查询在服务运行时在 MySQL 中运行。一般用途是:
CHECK TABLE <table name> [, table name, table name] [option] [option];
最简单的使用是一张没有任何选项的表:
CHECK TABLE <table name>;
查询的输出CHECK TABLE显示有关检查结果的信息表:
CHECK TABLE MySQL 查询的输出
检查表时可用的选项是:
FOR UPGRADE- 发现版本不一致。例如,MySQL 8.0不支持两位数的年份,因此包含此类值的表被标记为升级。
QUICK- 不检查行的不正确链接。这有助于避免超时。
FAST- 对未正确关闭的表执行检查。
CHANGED- 仅检查自上次检查以来发生更改或未正确关闭的表。
MEDIUM- 检查表行以验证已删除链接的有效性并对行执行校验和。
EXTENDED- 检查是否完全一致。
没有任何选项,对MyISAM表和视图CHECK TABLE执行MEDIUM检查。和对 InnoDB 引擎表和视图执行检查,而忽略其他选项。FOR UPGRADEQUICK
您还可以组合选项以进行更详细的检查。例如,要快速检查表是否已充分关闭,请运行:
CHECK TABLE <table name> FAST QUICK;
不适用于表的任何选项都将被忽略。
使用 mysqlcheck 检查表
该mysqlcheck命令是命令行版本的CHECK TABLE。该程序在 MySQL 服务运行时在终端运行。要执行检查:
1. 作为root 用户,导航到存储数据库的目录:
sudo su
cd /var/lib/mysql
2.检查整个数据库:
mysqlcheck <database name>
mysqlcheck 命令的终端输出
或者,也可以通过提供表名来检查数据库中的特定表:
mysqlcheck <database name> <table name>
表上 mysqlcheck 命令的终端输出
如何修复 MySQL 数据库
有几种方法可以修复 MySQL 中的数据库。但是,请记住,这些方法不是快速解决方法,可能会导致数据丢失。如果数据库表经常损坏,找出发生的原因。
在进行任何更改和开始修复之前,创建目录的副本:
cp -rfv /var/lib/mysql /var/lib/mysql_copy
或者,在尝试任何修复解决方案之前制作数据库的备份版本。请遵循我们的指南:如何备份和恢复 MySQL 数据库。
您将在下面找到如何修复 MySQL 数据库的三个选项。
使用 REPAIR TABLE 查询修复 MySQL 数据库
扫描并定位到有问题的数据库和表后,最快的解决方法就是REPAIR TABLE查询:
使用 REPAIR TABLE 修复 MySQL 数据库表
如果服务器在修复期间关闭,请在REPAIR TABLE服务器再次启动时重新运行该操作。确保在对同一张表执行任何其他操作之前执行此操作。在正常情况下,MyISAM 表不会因使用此方法而导致数据丢失。
使用 mysqlcheck 修复 MySQL 数据库
mysqlcheck命令是在终端中修复数据库表的替代方法。
1. 首先,以根用户身份导航到 MySQL 数据库文件夹:
cd /var/lib/mysql
2.在命令中添加修复数据库表的-r选项:mysqlcheck
mysqlcheck -r <database> <table name>
使用 mysqlcheck 修复 MySQL 表
该mysqlcheck -r命令是REPAIR TABLE查询的终端版本。
使用 ALTER TABLE 修复 MySQL 数据库
使用ALTER TABLE查询重建表使用相同的存储引擎。例如,如果您有一个 InnoDB 表,请运行:
ALTER TABLE <table name> ENGINE = InnoDB;
要重建 MyISAM 表,请使用:
ALTER TABLE <table name> ENGINE = MyISAM;
如果您不确定表使用哪个存储引擎,请运行以下查询以找出:
SHOW CREATE TABLE <table name>;
使用 SHOW CREATE TABLE 检查数据库表引擎
对 MySQL 数据库运行引擎特定的诊断和修复
根据所使用的数据库引擎,MySQL 提供特定于引擎的方法来分析和修复数据库表。
MyISAM 表容易损坏。但是,大多数时候错误很容易修复。
使用 InnoDB 数据库时,当校验和值不匹配时会出现损坏。错误通常是由于断电或其他一些硬件问题而发生的。
使用 myisamchk 检查和修复 MyISAM 表
MySQL 为 MyISAM 表提供了一个特定的检查器。
1.关闭MySQL服务器。打开终端并运行:
systemctl mysql stop
2. 作为 root 用户,导航到数据库的位置:
cd /var/lib/mysql/<database name>
3. 要检查特定表,请运行:
myisamchk <table name>
使用 myisamchk 检查 MyISAM 表
4. 通过运行修复表:
myisamchk --recover <table name>
5.重启MySQL服务器:
systemctl restart mysql
6、最后查看恢复后MySQL中的表:
sudo mysql -u <user> -p <password>
USE <database name>;
SELECT * FROM <table name> LIMIT 4;