【问题标题】:MySQL table is marked as crashed and last (automatic?) repair failedMySQL 表被标记为崩溃并且最后一次(自动?)修复失败
【发布时间】:2023-01-23 20:40:21
【问题描述】:

我正在修复这张表时突然服务器挂了,当我返回时所有表都正常但是这个显示“正在使用”并且当我尝试修复它时它没有继续。

错误 144 - 表“./extas_d47727/xzclf_ads”被标记为崩溃并且最后(自动?)修复失败

我该怎么做才能修复它?

【问题讨论】:

  • 我已经看到这主要发生在底层文件系统用完空闲 inode 时。使用 df -hi 检查。通常有些东西会用大量的小文件填充它,例如未清理的 php 会话文件。
  • 这个讨论可能只针对 MyISAM 表。

标签: mysql repair


【解决方案1】:

如果您的 MySQL 进程正在运行,请停止它。在 Debian 上:

sudo service mysql stop

转到您的数据文件夹。在 Debian 上:

cd /var/lib/mysql/$DATABASE_NAME

尝试运行:

myisamchk -r $TABLE_NAME

如果这不起作用,您可以尝试:

myisamchk -r -v -f $TABLE_NAME

您可以再次启动 MySQL 服务器。在 Debian 上:

sudo service mysql start

【讨论】:

  • 我有一个 myisam_sort_buffer_size is too small 错误,所以这个命令对我有用:myisamchk -r -v --sort_buffer_size=2G <table_name>
  • 执行此操作时我的磁盘已满,因此失败了。清理空间并再次尝试后,我被告知无法创建“table_file_name.TMD”。我猜是因为它从之前失败的时候就已经存在了。删除该文件后,它起作用了。
  • 这也解决了我的问题,谢谢。使用 --force 选项允许修复运行,即使结构或信息不正确。
  • 我遇到了错误myisamchk: error: Not enough memory for blob at 541031156 (need 1953787962)。命令 myisamchk --max-record-length=1048576 -r -v -f $TABLE_NAME 有所帮助。我还先创建了文件的备份副本;也许是一个很好的一般预防措施。
【解决方案2】:

尝试运行以下查询:

repair table <table_name>;

我有同样的问题,它解决了我的问题。

【讨论】:

  • 这是一个快速修复!有一个“坏”选项表。请确保您首先选择了正确的数据库!
【解决方案3】:

这是我解决这个问题的经验。我正在使用 XAMPP。 我收到以下错误

 Fatal error: Can't open and lock privilege tables: Table '.mysqldb' is marked as crashed and last (automatic?) repair failed  

这就是我为解决它所做的,一步一步:

  1. 去了地点C: mppmysql,对于你来说,位置可能不同,确保你在正确的文件位置。
  2. 已将数据文件夹备份创建为旧数据。
  3. 从 C: 复制文件夹“mysql” mppmysql备份
  4. 将其粘贴到 C: mppmysqldata 替换旧的 mysql 文件夹。

    它奏效了。请记住,我已经尝试了大约 10 种解决方案,但它们都不适合我。此解决方案可能适合您,也可能不适合您,但无论如何,请在执行任何操作之前备份您的数据文件夹。

    注意:我总是选择使用修复命令来解决这个问题,但在我的例子中,我根本无法启动 mysql 并且我无法让 myisamchk 命令工作。

    无论您做什么,请定期备份您的数据库。

【讨论】:

  • 一个小评论,采用这个对我也有效的解决方案可能需要你重新定义 MySQL 密码。从 XAMPP UI 打开“shell”并使用命令 # mysqladmin -u root password 输入您之前使用的密码并确认密码。不是它再次工作。
  • 最佳答案,顺利完成,没有任何错误
  • 没有一种解决方案对我有用。只有这个解决方案有效。这很奇怪,因为其他人也说同样的话......
  • 这是唯一对我有用的解决方案。
  • 是的,关键是要始终检查 mysql 日志文件的最后几行是否有错误,您将在一分钟内得到答复:D
【解决方案4】:

如果它在移动到 /var/lib/mysql 时拒绝了您的权限,请使用以下解决方案

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

【讨论】:

  • 完美,我遇到了权限错误。这排序了。
【解决方案5】:

我需要将 USE_FRM 添加到修复语句中以使其工作。

REPAIR TABLE <table_name> USE_FRM;

【讨论】:

    【解决方案6】:

    我得到 myisamchk: error: myisam_sort_buffer_size is too small 作为错误。

    解决方案

    myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G
    

    【讨论】:

      【解决方案7】:

      修复&lt;Your_table&gt;表后,转到data_dir并删除Your_table.TMP文件。

      【讨论】:

      • 使用此命令搜索它grep -r datadir /etc/mysql/。在debian和ubuntu下应该是/var/lib/mysql
      【解决方案8】:

      如果您的 XAMPP 安装发生这种情况,只需将 global_priv.MADglobal_priv.MAI 文件从 ./xampp/mysql/backup/mysql/ 复制到 ./xampp/mysql/data/mysql/

      【讨论】:

      • 的解决方案对我有用,只有在我的情况下表是./mysql/db。我尝试运行 myisamchk,但如果将“db”作为表名传递,它会显示“找不到文件”,如果指定扩展名,我会得到“...不是 db 文件”
      【解决方案9】:

      在不停止数据库的情况下,我转到这个文件夹

      cd /var/lib/mysql/$DATABASE_NAME

      然后执行以下命令

      myisamchk -r -v -f $TABLE_NAME

      没有任何问题,命令成功完成并解决了问题

      谢谢

      【讨论】:

      • 请不要添加“谢谢”作为答案。相反,投票选出您认为有帮助的答案。 - From Review
      • 这确实适用于崩溃表情况,这是我想添加的唯一说明 - 将 $TABLE_NAME 替换为您的表文件名(不带扩展名)。
      【解决方案10】:

      我尝试了现有答案中的选项,主要是标记为正确但在我的场景中不起作用的选项。但是,起作用的是使用 phpMyAdmin。选择数据库,然后选择表,从底部的下拉菜单中选择“修复表”。

      • 服务器类型:MySQL
      • 服务器版本:5.7.23 - MySQL 社区服务器 (GPL)
      • phpMyAdmin:版本信息:4.7.7

      【讨论】:

        【解决方案11】:

        这是一个 100% 的解决方案。我自己试过了。

        myisamchk -r -v -f --sort_buffer_size=128M --key_buffer_size=128M /var/lib/mysql/databasename/tabloname

        【讨论】:

          【解决方案12】:

          输入您的mysql并选择您的数据库 然后

          修表;

          这和我一起工作

          【讨论】:

            猜你喜欢
            • 2015-09-17
            • 2020-02-11
            • 2011-05-20
            • 2012-08-05
            • 2013-05-30
            • 2019-12-30
            • 1970-01-01
            相关资源
            最近更新 更多