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