繁体   English   中英

如何在不使用 phpMyAdmin 的情况下修复 MySQL 表?

[英]How to repair a MySQL table without using phpMyAdmin?

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

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

phpmyadmin 中的修复表无法修复它。

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

我怎样才能取回数据? 还是只是结构?

(我在 amd quad 上的 xampp/windows 下运行 mysql)

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

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

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

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

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

明智的做法是在运行myisamchk之前制作数据目录的备份副本,以防万一。

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

这是修复按钮的位置:

在此处输入图片说明

您也可以像这样使用 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM