4

我有一个包含复杂列的表,我开始用大量数据填充它,在此期间,它崩溃了。

表报告为崩溃,需要修复。

phpmyadmin 中的修复表无法修复。

然后我决定再次开始填充过程,但我什至无法检索表结构。

如何取回数据?还是只是结构?

(我在 AMD Quad 上的 xampp/windows 下运行 mysql)

4

4 回答 4

10

PHPMyadmin 在执行长查询时往往会出现问题。如果它无法使用特定的错误消息进行修复表,请发布它。如果它只是挂起,你应该尝试使用 mysql 的命令行版本进行修复,它位于你的 mysql 安装的 bin 目录中。

mysql -u username -p
mysql> use dbname;
mysql> repair table tablename;

根据桌子的大小,这可能需要一段时间。

如果这不起作用,那么如果您的表使用 MyISAM 引擎,您的下一步就是使用 myisamchk。

于 2010-02-19T13:30:53.290 回答
6

如果您的表在 myISAM 中,则myisamchk是第一个检查工具。它位于/bin您的 mySQL 安装目录中。这是它的修复选项列表。

明智的做法是在运行数据目录之前对其进行备份myisamchk,以防万一。

于 2010-02-19T13:12:58.887 回答
0

如果您的服务器正常工作,您也可以通过 1 或 2 个简单步骤修复它。转到 phpmyadmin 并检查该表被压碎,然后从下拉列表中选择修复表选项。

这是修复按钮的位置:

在此处输入图像描述

于 2021-03-10T05:11:29.203 回答
-1

您也可以像这样使用 php 脚本:

<?php
    $host="localhost";
    $user="db_username";
    $password="db_password";
    $db="database_name";
    
    // connect to database
    $con = mysqli_connect($host,$user,$password);
    // select the correct database
    mysqli_select_db($con,$db);
    // get a list of the tables
    $alltables = mysqli_query($con,"SHOW TABLES;");
    
    // record the output
    $output = array();
    
    while($table = mysqli_fetch_assoc($alltables)){
     foreach($table as $db => $tablename){
      $sql = 'REPAIR TABLE '.$tablename.';';
      $response = mysqli_query($con,$sql) or die(mysqli_error($con));
      $output[] = mysqli_fetch_assoc($response);
     };
    };
    // print output
    print_r($output);
于 2021-10-15T05:27:00.233 回答