文件修复

如何修复MySQL数据库和表?

简介:本文概述了导致MySQL数据库损坏的常见原因。它还描述了使用MySQL错误日志来识别数据库和表中的损坏。此外,它解释了如何修复MySQL数据库和表的手工方法。文章还建议使用MySQL修复软件快速有效地修复损坏的数据库和表,而不会停机。从下面的链接尝试该软件的演示版本,以验证其功能。


免费下载

当MySQL数据库和表损坏或损坏时,您应该做的第一件事是确定损坏背后的可能原因。以下是MySQL数据库损坏的一些常见原因:

  • 错误的硬件
  • MySQL软件bug
  • MySQL服务异常终止
  • 由于内存不足或损坏MySQL数据文件/索引文件导致服务器崩溃

如何识别腐败的MySQL数据库和表?

当MySQL数据库及其表发生损坏时,您可以通过检查MySQL错误日志找到有关可能遇到的不同数据库问题的相关信息。您可以在“my.ini文件中指定的数据目录”中找到错误日志。Windows下data目录的默认位置如下:

C:\Program Files\MySQL\MySQL Server 8.0\dataC: \ ProgramData \ MySQL

注意:默认情况下,“C:\ProgramData”目录是隐藏的。您需要更改文件夹选项以查看目录和内容。

要在其他平台(如Ubuntu)中查找错误日志,请检查变量log_error。

注意:有关MySQL错误日志的更多详细信息,请参阅此链接

要识别表损坏,请运行以下命令:

  • 如果你的服务器还在运行,你正在使用MyISAM/InnoDB数据库引擎,使用CHECK TABLE语句检查单个或多个表的错误。CHECK TABLE命令的语法为:

检查表tablename [,tablename2…]][选项][option2…)

要更深入地检查表,请使用以下可用选项:

表1 -检查表检查选项

选项名称

描述

快速

顾名思义,这是检查表是否损坏的最快选项。它避免了扫描行中不正确的链接。此选项适用于InnoDB和MyISAM表和视图。

它只检查没有正确关闭的MyISAM表。

改变了

检查未正确关闭或自上次检查以来已更改的MyISAM表。

媒介

该选项仅适用于MyISAM表和视图。它扫描行以验证删除的链接是否正确。它还通过计算行的键校验和来验证键的计算校验和。

扩展

它是最慢的选项,因为它对每行的所有键执行全键查找。如果其他检查没有报告任何错误,但您怀疑数据库表已损坏,则使用此选项。

  • 另一个可以用来检查表错误的命令是mysqlcheck。mysqlcheck命令的语法如下:

Mysqlcheck [options] dbname tablename [tablename2…]]

与检查表有关的选项如下所示:

表2 - mysqlcheck表检查选项

选项名称

描述

——检查

检查表中的错误

——所有数据库

检查所有数据库表是否有错误

——check-only-changed

只检查自上次检查以来已更改的表

——扩展,- e

检查表需要很长时间,但可以确保表是100%一致的

——快

只检查未正确关闭的表

——medium-check

与——extended操作相比,执行检查的速度更快

——快速

这是检查表是否损坏的最快选项

  • 如果服务器宕机或数据库表无法访问,请运行myisamchk命令。语法是:

Myisamchk[选项]表名MYI

下表列出了检查表的选项:

表3 - myisamchk表检查选项

选项名称

描述

——检查- c

检查表错误的默认选项

——check-only-changed

仅检查自上次检查以来已更改的表

——延长止

仔细检查一下桌子。如果表有很多行,这个过程将花费一些时间。

——快,- f

只检查没有正确关闭的表

信息,我

只打印被检查的表的统计信息

——medium-check

检查表的速度比——extend-check操作快

- - -只读

不要将表格标记为已检查。使用此选项检查正在被其他不使用锁定的应用程序使用的表

注意:如果表的状态为OK(如下面的代码片段所示),则不需要修复表。

+--------------------+--------+-------------+--------------+

| Table | Op | Msg_type | Msg_text |

+---------------------+--------+--------------+-------------+

| databasetable1 | check | status | OK

+---------------------+--------+------------=-+-------------+

但是,如果状态不是OK,则表示表已损坏,需要修复。

修复MySQL数据库和表

当MySQL数据库及其表损坏时,从上次已知的良好备份中恢复数据库。但是必须使用更新后的备份使数据库联机。

即使您有最新的可用备份,您也可能希望尝试修复和恢复MySQL数据库和表,因为使数据库联机可能花费更少的时间。

手动修复MySQL数据库和表的方法

注:

  • 在修复损坏的MySQL数据库表之前,请确保对其进行备份。这将防止进一步的数据损坏。
  • 如果您已经发现了损坏的InnoDB表,请跳到InnoDB崩溃恢复
方法1 -使用修理表法

注意:repair TABLE命令只能修复MyISAM表、ARCHIVE表和csv表。

如果在MyISAM数据库表中发现了损坏,请尝试使用REPAIR table语句修复表。修复单个表的语法是:

修复表表名[选项]

注意:将tablename替换为损坏的数据库表的名称。

执行如下MySQL命令修复数据库中的所有表:

Mysqlcheck——repair——databasename

请参考下表检查REPAIR table选项:

表4 -修理表选项

选项名称

描述

快速

这是只修复数据文件而不修复索引文件的最快选项

扩展

尝试从数据文件中恢复所有可能的行。将此选项作为最后的手段,因为它还会发现许多垃圾行。

USE_FRM

如果.MYI索引文件丢失或头文件损坏,请使用此选项

您还可以使用mysqlcheck命令行实用程序来修复MyISAM数据库表。该实用程序提供命令行访问REPAIR TABLE语句。运行以下命令从命令行修复指定的表:

修复databasename表名

要修复MySQL数据库中的所有表,使用如下命令:

Mysqlcheck——修复——所有数据库

方法2 -使用MySQL内置修复选项

MySQL提供了两个内置选项来修复数据库表的损坏:

2.1.使用myisamchk命令行实用程序

注意:执行myisamchk命令前,请确保使用service mysqld stop命令停止MySQL服务器。这对于防止用户在处理损坏的表时访问它们非常重要。

运行带“——recover”选项的myisamchk恢复MyISAM表:

Myisamchk—恢复表名

'——recover '选项是执行MyISAM表恢复的默认选项。如果该选项失败,请尝试运行带——safe-recover选项的myisamchk命令:

Myisamchk——安全恢复表名

——safe-recover选项比默认恢复选项慢,因为MySQL一次扫描数据文件中的每条记录,然后恢复索引。使用myisamchk修复表后,重新启动MySQL服务器。

2.2.InnoDB崩溃恢复

要修复MySQL InnoDB表,请尝试运行InnoDB恢复进程。按照以下步骤修复损坏的InnoDB表:

步骤1:在MySQL服务器上找到并打开配置文件my.cnf。

步骤2:找到[mysqld]段,然后添加以下语句:

(mysqld)

Innodb_force_recovery = 1

重启mysql服务

注意:innodb_force_recovery默认值为' 0 ',但您可能需要将该值更改为' 1 '以启动InnoDB db引擎并转储表。您可能需要将innodb_force_recovery值增加到4或更高来转储您的表;但这涉及到数据丢失的风险。

步骤3:当您能够启动数据库时,将所有数据库导出到转储文件。sql文件:

Mysqldump——all-databases——add-drop-database——add-drop-table > dump.sql

步骤4:现在重新启动服务器,并使用drop database命令删除单个受影响的数据库或所有数据库。

注意:如果不能删除数据库,请停止mysql服务器,然后运行以下命令手动删除数据库:

cd /var/lib/mysql

Rm -rf db_name

步骤5:一旦db被删除,禁用InnoDB恢复模式。为此,在[mysqld]中注释以下行:

# innodb_force_recovery =…

步骤6:保存my.cnf文件,然后再次启动MySQL服务器。

执行这些步骤有望帮助您恢复InnoDB表。如果执行恢复失败,请使用专业的MySQL数据库修复软件修复数据库并恢复其所有数据。

修复损坏的MySQL数据库和表的快速解决方案

对损坏的数据库和表进行故障排除可能需要花费大量时间,并且可能无法产生预期的结果。您可能会遇到数据不一致错误。使用MySQL的恒星修复软件可以快速修复损坏的MySQL数据库并恢复所有表和其他对象,保持数据完整。该软件在几个简单的步骤中执行修复,不需要编写多行代码。

免费下载恒星修复MySQL

来自Stellar®的MySQL修复软件的一些关键功能如下:

  • 修复MySQL InnoDB和MyISAM数据库表
  • 修复损坏的MySQL数据库在Windows和Linux系统
  • 恢复所有数据库对象,包括表,键,视图,触发器等。
  • 修复多个损坏的MySQL数据库文件在一个单一的进程
  • 预览所有可恢复的MySQL数据库对象

步骤修复MySQL数据库和表使用恒星修复MySQL软件

步骤1:运行MySQL的恒星修复软件主界面打开选择数据文件夹对话框。选择您正在使用的MySQL版本,然后浏览要修复的数据库文件。点击好吧

选择MySQL版本

图1 -选择MySQL版本

第二步:从选择数据库对话框中,选择要修复的单个或所有数据库。

选择“MySQL Database for Repair”

图2 -选择要修复的数据库

第三步:点击修复开始修复损坏的MySQL数据库。

第四步:当修复完成消息框出现时,点击好吧按钮。

步骤5:预览窗口在左侧窗格中显示所有可恢复的数据库表和其他组件。单击表以在右窗格中查看其内容。

预览可恢复的MySQL对象

图3 -可恢复的MySQL数据库对象预览

步骤6:从预览窗口中选择要恢复的表,然后选择保存文件菜单。

第七步:在保存数据库对话框中,执行以下操作:

  • 选择MySQL另存为
  • 要在线保存修复后的MySQL数据库,请通过在下面指定所需的详细信息连接到MySQL服务器连接到服务器。
  • 点击保存

连接MySQL服务器

图4 - MySQL数据库文件保存选项

第八步:当保存完整的弹出消息框,点击好吧

保存修复后的MySQL数据库完成消息框

图5 -保存完整消息框

修复后的数据库和表现在将被保存。

结论

您可以按照本文中介绍的分步指导手动修复损坏的MySQL数据库和表。但是,手动对损坏的数据库进行故障排除可能会花费大量时间,并导致数据不一致。但是使用Stellar Repair for MySQL软件可以帮助你快速修复损坏的数据库(InnoDB和MyISAM)表的原始格式。

73% 很多人觉得这篇文章很有帮助