Не удается импортировать файл sql, экспортированный из phpMyAdmin - PullRequest
0 голосов
/ 09 марта 2012

Хорошо, это ситуация. Я сделал резервную копию своей базы данных, зайдя в phpMyAdmin, а затем, не выбирая базу данных, нажимаю кнопку экспорта. Теперь, когда я пытаюсь импортировать экспортированный файл SQL в свежую установку MySQL, я получаю такие ошибки, как http://pastebin.com/vDHdG2T6 (используется пастин, так как он довольно длинный)

Я знаю, что вместо этого должен был использовать mysqldump, поскольку он пропустил бы таблицу information_schema. У вас есть предложения, как решить эту проблему или импортировать этот файл, не редактируя файл с миллионами строк?

Я также попытался импортировать файл как: mysql -u root -p -f -h localhost

Заранее спасибо!

EDIT:

Спасибо, ребята, за предложения, я уверен, что вы были на правильном пути. Тем не менее, тем временем я тоже испортил свой файл резервной копии, поэтому мне пришлось написать небольшой 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 в той же директории, в нем будут перечислены базы данных, найденные в файле, и просто щелкните мышью по любому значению, которое будет отображаться в текстовой области.

Удачи.

1 Ответ

0 голосов
/ 11 апреля 2012

По предложению 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>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...