Ошибка импорта базы данных MySQL из-за расширенных вставок - PullRequest
15 голосов
/ 25 марта 2009

Я импортирую 400 МБ (несжатую) базу данных MySQL. Я использую BIGDUMP и получаю эту ошибку:

Stopped at the line 387.

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn't place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts. Please read the BigDump FAQs for more infos.

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

Спасибо за любую помощь.

Лучший Ник

EDIT: Похоже, что единственно возможный ответ - разделить расширенные вставки, но мне все еще нужна помощь в выяснении, как разбить файл, как показано в ответе ниже. Пожалуйста помоги. Спасибо.

Ответы [ 7 ]

34 голосов
/ 09 июля 2012

Вам не нужно вносить какие-либо изменения в файл .sql: просто откройте bigdump.php в любом текстовом редакторе, найдите строку

define ('MAX_QUERY_LINES',300);

и замените 300 на что угодно.

8 голосов
/ 25 марта 2009

Просто отредактируйте файл дампа так, чтобы после 300 вставок вы начинали новую инструкцию:

INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (1, 'a', 'b'),
    (2, 'c', 'd'),
    (3, 'e', 'f'),
    -- snip --
    (300, 'w', 'x');
INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (301, 'y', 'z'),
    (302, ... etc

Вы можете сделать это, просто открыв файл <backup>.sql в любом текстовом редакторе, это просто текст. Иногда резервная копия может быть файлом .gz или .bz, но это просто zip-архивы: если вы распакуете эти сжатые или сжатые файлы, у вас получится один .sql файл, который вы можете легко редактировать.

Вероятно, было бы не сложно написать скрипт для разделения каждого оператора после произвольного числа строк. Основная логика программы будет выглядеть примерно так:

  1. найдите строку, которая начинается с "INSERT".
  2. скопировать строку до конца слова "VALUES"
  3. пройти все следующие строки, считая по ходу.
  4. если ваш счетчик достигает 300, добавьте точку с запятой в конец последней строки и вставьте в оператор "INSERT ... VALUES" ранее. Сбросьте счетчик до 1 и перейдите к шагу 3.
  5. если вы достигнете строки, которая начинается с «INSERT», сбросьте счетчик на 1 и перейдите к шагу 2.

Хотя вы можете просто сделать это вручную, а затем убедиться, что все будущие резервные копии не будут использовать расширенные вставки. Кроме того, phpMyAdmin позволяет вам установить максимальный размер оператора при создании экспорта, так что, в основном, он сделает это за вас.

Хотя то, что вы сделали с ограничением памяти, вероятно, гораздо более простое решение. Для тех, кто находится в аналогичной ситуации и не может изменить эти ограничения, попробуйте описанное выше.

4 голосов
/ 25 марта 2009

Мне удалось успешно импортировать базу данных после увеличения буфера памяти и выполнения обычного импорта mysql через SSH.

Я использовал следующую команду с абсолютным путем:

mysql -u <username> -p < /home/dir/dumpfile.sql

Лучший Ник

3 голосов
/ 14 декабря 2015

Для меня это работало следующим образом:

Поиск

$max_query_lines = 300;

затем просто заменяется на

$max_query_lines = 3000;
0 голосов
/ 15 февраля 2019

Откройте bigdump.php и измените следующую строку:

$max_query_lines = 300;

к этому:

$max_query_lines = 300000;
0 голосов
/ 12 февраля 2016

Старый вопрос, но я нашел его через поиск в интернете, и у него пока нет ответа, который я искал, так как похоже, что phpMyAdmin переименовал настройку.

Чтобы отключить «расширенные вставки» в экспорте phpMyAdmin, необходимо установить для параметра «Синтаксис для использования при вставке данных» первый параметр:

include column names in every INSERT statement 
Example: INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3)
0 голосов
/ 30 августа 2013

Спасибо за решения 'max_query_lines' и 'INSERT'!

"Оба решения имеют некоторые недостатки. Без расширенной вставки выходной дамп будет во много раз больше, чем дамп с расширенными вставками. Увеличение max_query_lines увеличит использование памяти скриптом bigdump, и вашему серверу может не хватить памяти."

Источник: http://www.etctips.com/error-at-this-place-the-current-query-includes-more-than-xxx-dump-lines/

...