如何修复 MySQL 中损坏的表

0 股票
0
0
0
0

介绍

有时 MySQL 表会损坏,这意味着发生了错误,表中的数据无法读取。尝试从损坏的表中读取数据通常会导致服务器崩溃。.

表格损坏的常见原因
  • MySQL 服务在写入数据过程中停止运行
  • 服务器正在修改表格时,外部应用程序却修改了表格。
  • 汽车意外熄火
  • 计算机硬件故障
  • MySQL 代码中的软件漏洞

如果您怀疑某个表已损坏,在开始修复或故障排除之前,应先备份数据目录。这将有助于最大限度地降低数据丢失的风险。.

修复 MySQL 中损坏表的步骤

首先,停止 MySQL 服务:

sudo systemctl stop mysql

注意:在某些系统(例如 Rocky Linux)上,MySQL 服务可能被称为 mysqld 为人所知。.

然后将所有数据复制到一个新的备份目录。在 Ubuntu 系统中,默认数据目录是 /var/lib/mysql/ 是:

cp -r /var/lib/mysql /var/lib/mysql_bkp

备份完成后,就可以检查表是否真的损坏了。如果存储引擎没有备份该表, MyISAM 如果您使用 MySQL,可以通过运行以下命令来重启它: 核对表 在 MySQL 命令提示符下进行检查:

sudo systemctl start mysql
CHECK TABLE table_name;

如果表已损坏,您将看到一条确认消息。如果 MyISAM 表已损坏,通常可以使用以下命令修复它。 维修台 已修复:

REPAIR TABLE table_name;

如果修复成功,您将在输出中看到类似这样的消息:

Output
+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+

如果表仍然损坏,MySQL 文档提供了修复损坏表的其他方法。.

使用 InnoDB 存储引擎修复损坏的表

如果存储引擎导致表损坏 InnoDB 修复过程会因您使用的 MySQL 版本而异。自 MySQL 8.0 版本起,InnoDB 一直是其默认的存储引擎,并具备自动损坏检查和修复功能。InnoDB 通过读取每个页面的校验和来检测损坏页面,如果发现校验和存在差异,则会自动停止 MySQL 服务器。.

InnoDB 表很少需要修复,因为 InnoDB 具有崩溃恢复机制,可以通过重启服务器解决大多数问题。但是,如果您确实需要重建 InnoDB 表,MySQL 文档提供了相关操作说明。 转储并重新加载 建议采用此方法。该方法涉及使用工具重新获取对已损坏表的访问权限。 mysqldump 它用于对表进行逻辑备份,保留表结构及其中的数据,然后将表重新插入数据库。.

重启 MySQL 服务

首先,尝试重启 MySQL 服务,看看是否能访问服务器:

sudo systemctl restart mysql

如果服务器仍然宕机或不可用,您可以使用该选项 强制恢复 在设置中启用 InnoDB。为此,请创建一个文件。 mysqld.cnf 编辑。在 Ubuntu 和 Debian 系统中,此文件通常位于 /etc/mysql/ 在 Red Hat 和 Rocky 系统中,此文件通常位于 /etc/my.cnf.d 它位于。.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在该部分 [mysqld] 添加以下行:

. . .
[mysqld]
. . .
innodb_force_recovery=1

保存更改并关闭文件后,尝试再次启动 MySQL 服务。如果可以访问损坏的表,请使用该工具。 mysqldump 使用此文件备份表格数据。您可以随意命名此文件,但这里将其命名为 输出.sql 我们称之为:

mysqldump database_name table_name > out.sql

然后从数据库中删除该表。为此,您可以使用以下命令:

mysql -u user -p --execute="DROP TABLE database_name.table_name"

最后,使用该文件创建表格。 倾倒 找到您最近创建的文件:

mysql -u user -p < out.sql

请注意,InnoDB 存储引擎通常比旧的 MyISAM 引擎更具弹性。使用 InnoDB 的表仍然可能损坏,但由于其自愈功能,表损坏和崩溃的风险要低得多。.

结果

通过本指南,您学习了如何修复 MySQL 中的损坏表,并使用不同的方法解决了 MyISAM 和 InnoDB 存储引擎中的问题。在进行任何更改之前,请务必备份数据,以避免数据丢失的风险。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢