SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.08.2012 12:55:01

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Ошибка при загрузке дампа - Unknown command '\,'

Код:

#uname -a
Linux aq1.aqproject.ru 2.6.32-279.5.1.el6.x86_64 #1 SMP Tue Aug 14 23:54:45 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

#mysql -V
mysql  Ver 14.14 Distrib 5.1.61, for redhat-linux-gnu (x86_64) using readline 5.1

Загружаю ранее созданный дамп

Код:

mysql -u root -p basename < /path/to/basename.sql
Enter password:

загрузка идет некоторое время, создает таблицы и заполняет их, но на опеределенном этапе (одном и том же) вываливается в

Код:

ERROR at line 1121: Unknown command '\,'.

расстраиваюсь, беру awk и достаю эту строку из файла

Код:

awk '{ if (NR==1121) print $0 }' /path/to/basename.sql > /home/user/bug.sql

Строка длинной в метр, инсерт в таблицу.
Сверяю ID строк, оказывается что это совсем-совсем не тот запрос, расстраиваюсь еще больше.

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

Код:

mysql -u root -p basename < /path/to/test.sql

и он заливается нормально 0_о

Собственно вопрос - что мне с этим делать и как залить дамп не распарсивая 2Гб sql-текста с сомнительной перспективой ?

Была мысль про max_allowed_packet - увеличил до 5М, не помогло.
Пробовал ставить mysql 5.5.27 - ошибка та же и там же.
Еще меня волнует что дамп был передан с помощью rsync'а, возможно ли что он внес в файл какой-то инородный символ ? Но найти его не удается.
В mysqld.log ничего странного нет.

Неактивен

 

#2 24.08.2012 16:45:59

krevedko13
Участник
Зарегистрирован: 19.12.2010
Сообщений: 20

Re: Ошибка при загрузке дампа - Unknown command '\,'

Отвечаю сам себе - ошибка была в спецсимволах затесавшихся в дамп (EOF посреди файла, как вам такой прикол ?), на сервере умирала оперативка, судя по всему побочный эффект.
Строки найденные в логе запросов так же были неверные, по тому и заливались.

Итак, инфу вытаскивал следующим образом:

Код:

<?php
$handle = fopen('dump.sql', 'r');

while(!feof($handle))
{
    $str = fgets($handle);

    if(preg_match("/^INSERT INTO `(.*)` VALUES(.*)\)\;/", $str, $matches))
    {
        file_put_contents('dump-inserts.sql', $str, FILE_APPEND);
    }
    else
    {
        file_put_contents('shema.sql', $str, FILE_APPEND);
    }
}
fclose($handle);

В файле dump-inserts.sql будут содержаться данные, в shema.sql - структура таблиц и все глюки.
Открываем shema.sql вашим любимым блокнотом, чистим от глюков, заливаем в мускуль:

Код:

mysql -u root -p < /path/to/shema.sql
mysql -u root -p --default-character-set=UTF8 basename < /path/to/dump-inserts.sql

Собственно всё.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson