簡體   English   中英

無法導入從phpMyAdmin導出的SQL文件

[英]Can't import a sql file exported from phpMyAdmin

好的,這就是這種情況。 我已通過進入phpMyAdmin備份了數據庫,然后在未選擇任何數據庫的情況下單擊“導出”。 現在,當我嘗試將導出的sql文件導入到全新的MySQL安裝中時,出現諸如http://pastebin.com/vDHdG2T6之類的錯誤(因為它很長,所以使用了pastebin)

我知道我應該使用mysqldump代替,因為它會跳過information_schema表。 您對如何解決此問題或導入該文件而無需編輯百萬行文件有任何建議嗎?

我也嘗試過導入文件,例如:mysql -u root -p -f -h localhost <Documents / localhost.sql這確實導入了數據庫,但其中許多數據庫已損壞,缺少表,諸如此類...我使用了-f,這樣無論出現什么錯誤,它都會繼續運行。

提前致謝!

編輯:

謝謝大家的建議,我相信您的工作方向正確。 但是,與此同時,我最終也弄亂了我的備份文件,因此我不得不編寫一些php代碼來提取所需的行。 在這種情況下,如果有人遇到相同的問題:

$data = file_get_contents('import.sql');


if (! isset($_GET['db'])) {
    //list databases
    echo '<ul>';
    preg_match_all("/Database: `(.*?)`/", $data, $dbs);

    foreach ($dbs[1] as $database){
        echo "<li><a href=\"index.php?db=$database\">$database</a></li>";
    }
    echo '</ul>';
} else {
    $database = $_GET['db'];
    //only get the queries for that db
    $data = explode(PHP_EOL, $data);
    $buffer = array();
    $buffer_started = false;

    foreach ($data as $key => $row){

        if (preg_match("/Database: `.*?`/", $row) && $buffer_started) {
            array_pop($buffer);
            break;
        }

        if (preg_match("/Database: `$database`/", $row)) {
            $buffer_started = true;
            continue;
        }

        if ($buffer_started) {
            array_push($buffer, $row);
        }


        unset($data[$key]);
    }

    echo '<textarea cols="128" rows="20">'.implode("\n", $buffer).'</textarea>';
}

將其另存為index.php,並將您的sql放入相同目錄中的import.sql中,它將列出在文件中找到的數據庫,只需單擊所需的任何一個,它將在文本區域中顯示查詢。

祝好運。

正如beanland所建議的那樣,我將回答我自己的問題,並使用上面編輯中的稍作修改的代碼:

error_reporting(E_ALL);
$data = file_get_contents('import.sql');


if (! isset($_GET['db'])) {
    //list databases
    echo '<ul>';
    preg_match_all("/Database: `(.*?)`/", $data, $dbs);

    foreach ($dbs[1] as $database){
        echo "<li><a href=\"index.php?db=$database\">$database</a></li>";
    }
    echo '</ul>';
} else {
    $database = $_GET['db'];
    //only get the queries for that db
    $data = explode(PHP_EOL, $data);
    $buffer = array();
    $buffer_started = false;

    foreach ($data as $key => $row){

        if (preg_match("/Database: `.*?`/", $row) && $buffer_started) {
            array_pop($buffer);
            break;
        }

        if (preg_match("/Database: `$database`/", $row)) {
            $buffer_started = true;
            continue;
        }

        if ($buffer_started) {
            array_push($buffer, $row);
        }


        unset($data[$key]);
    }

    $data = implode("\n", $buffer);

    //convert all InnoDB to MyISAM

    $data = str_replace('InnoDB', 'MyISAM', $data);

    echo '<a href="index.php">Back</a><h1>'.$database.'</h1><textarea cols="128" rows="20">'.$data.'</textarea>';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM