Задавайте вопросы, мы ответим
Вы не зашли.
#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 ничего странного нет.
Неактивен
Отвечаю сам себе - ошибка была в спецсимволах затесавшихся в дамп (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
Собственно всё.
Неактивен