@nata32

Как залить большой файл sql в базу?

Добрый день, есть большой файл sql, больше 40 гегов, через phpmyadmin залить не реально, заливаю его по ftp на сервер, захожу через putty по SSH и гружу по
mysql -u****** -p****** ******* < *******.sql
все типа начинает грузить нормально, но проблема в том что через некоторое время выдается сообщение, что сервер прервал соединение и соответственно putty вываливается и заливка прекращается.
Есть ли какие варианты залить большие файлы ?
Почему прекращается работы при разрыве соединения, разве не должно это влиять на работу сервера и разрыв не должен прекращать заливку ?
Спасибо.
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
@Everything_is_bad
запусти screen и в нем включи загрузку
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
захожу через putty по SSH и гружу по
mysql -u****** -p****** ******* < *******.sql

Напрасно.
Загрузи CLI, а уж потом в нём грузи дамп командой SOURCE.
Во-первых, не будет тайм-аута, интерактивно клиент, в отличие от безынтерфейсного, не воспринимается как померший, ибо постоянно льёт в выходной поток. Во-вторых, будешь видеть диагностику загрузки (особенно если запустишь CLI с ключом --tee).
Ответ написан
Комментировать
@rPman
Телепатствую.

Главная причина, чаще всего, это не отключенные индексы, запись в таблицу с ними это n*log(n), а без индексов это n или даже log(n).

Раздели sql на место создания структуры и импорт данных. Замени код создания структуры на такой, чтобы таблицы создавались без индексов, и отдельно создание этих индексов уже после (автоматизировать это не сложно, но чтобы так с ходу найти готовый код я не найду).

Отдельно в sql коде можно расставить commit через некоторое количество (десятки тысяч +-) insert-ов, что бы лог не переполнялся.

Следующий вариант - оптимизация дисковой записи, найди способ принудительно включить lazy writes на диске с базой, например с помощью виртуализации или хотя бы ext4 опция data writeback. Внимание! в этом режиме любая проблема с ос (например отключили питание) испортит данные. Т.е. на время импорта создай файловую систему для таблиц отдельно, потом данные тупо скопируешь. Но если у тебя норм ssd или дисковый контроллер с хорошим кешем, то это не актуально.

И если говорить об самым экстремально большом ускорении, размести файлы базы в tmpfs (оперативка, сотня гигабайт сейчас даже дома не проблема)... Можно для этого арендовать в облаке vps-ку, но желательно в этом же датацентре, а то копировать сотню гигабайт может быть долго. И да, следи за тем что бы была та же архитектура процессора и версия mysql
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы