【问题标题】:After running a bunch of queries the table keeps crashing运行一堆查询后,表不断崩溃
【发布时间】:2016-05-06 02:09:18
【问题描述】:

表“geoPoint”被标记为崩溃,应该修复

我用一个有 500 行的文件调用这个函数 这会导致 500 个查询被快速连续调用...

这可能不是最有效的,但为什么它会不断地崩溃地理点表??

CSVImport($table, $fields,$_FILES["file"["tmp_name"],$cardID,2);

function CSVImport($table, $fields, $file,$cardID,$intype) {
    if($file == null)
    {
        echo "Error No File";
         die('Cannot open uploaded file.');
    }
    $handle = fopen($file,'r');
    if(!$handle) die('Cannot open uploaded file.');

    $tmpfname = tempnam("/tmp", "FOO");
    copy($file, $tmpfname);
    $row_count = 0;
    $rows = array();

    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
        $row_count++;
        $itemcount = 0;

        $NAME = $data[0];
        $LAT = $data[1];
        echo "<td>{$LAT}</td>";
        $LON = $data[2];
        echo "<td>{$LON}</td>";
        $STREETNUM = $data[3];
        echo "<td>{$STREETNUM}</td>";
        $STREETNAME = $data[4];
        echo "<td>{$STREETNAME}</td>";
        $CITY = $data[5];
        echo "<td>{$CITY}</td>";
        $ZIP = $data[6];
        echo "<td>{$ZIP}</td>";
        $COUNTY = $data[7];
        echo "<td>{$COUNTY}</td>";
        $UUID = $data[8];
        echo "<td>{$GEOTYPE}</td>";
        $DATE = $data[9];
        echo "<td>{$DATE}</td>";
        $GARCOMUUID = $data[10];
        echo "<td>{$GARCOMUUID}</td>";
        $CITYUUID = $data[11];
        echo "<td>{$CITYUUID}</td>";
        $CITYSPECUUID = $data[12];
        $latRound = number_format((float)$LAT, 3, '.', '');
        $lonRound = number_format((float)$LON, 3, '.', '');
        number_format((float)$foo, 2, '.', '');

        echo "<td>{$CITYSPECUUID}</td>";

        $custquery="SELECT * FROM `geoPoint` WHERE `lat` LIKE '%{$latRound}%' AND `lon` LIKE '%{$lonRound}%' AND `street_num` = {$STREETNUM}";

        $custre=mysql_query($custquery);
        if (!$custre) {    echo 'Could not run custre query: ' . mysql_error();    exit;    }
        $custarr = mysql_fetch_array($custre, MYSQL_ASSOC);

        if($custarr == null)
            $itemisnew = 0;
        else
        {
            $itemisnew = mysql_num_rows(custarr);
        }
        if($itemisnew == 0)
            echo "<td>NEW</td>";
        else if($itemisnew == 1)
            echo "<td>REPLACE</td>";
        else
            echo "<td>MULTIPLE!</td>";
    }

    fclose($handle);

【问题讨论】:

  • 我总是可以通过phpmyadmin修复表
  • SELECT 查询不会修改表,我认为它们不会造成损坏。你确定这是它发生的功能吗?
  • 是的 - 我运行它,然后崩溃...:/
  • 可能其他脚本正在同时写入表,并且正在损坏表。
  • 你检查过内存耗尽了吗?

标签: php mysql


【解决方案1】:

在 PHP 中不会导致表崩溃。这是硬件故障(内存损坏或磁盘损坏)、配置错误或 MySQL 中的错误的结果。

当表崩溃时,MySQL 的错误日志中是否显示任何内容?如果 MySQL 设置为使用过多内存,它可能会触发 Linux 的内存不足处理程序,这会杀死 MySQL 进程,使您的表处于“脏”状态。您可能不会注意到,因为许多发行版的脚本会自动监控并重新启动崩溃的守护进程。这是我的第一个猜测。

【讨论】:

  • 是的,mysql&gt; SHOW STATUS LIKE 'UPTIME'; 应该是确认这一点的简单方法。在小型系统上,MySQL 通常可以恢复得如此之快,以至于您可能不会注意到……但是如果正常运行时间计数器重置,那就很好地暗示了正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 2011-11-02
  • 2014-04-17
  • 1970-01-01
  • 2023-02-16
  • 2015-10-05
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多