Импорт большого файла sql в MySql через командную строку

50

Я пытаюсь импортировать sql файл размером около 300 МБ в MySql через командную строку в Ubuntu. Я использовал

source /var/www/myfile.sql;

Теперь он отображает бесконечно выглядящие строки:

Query OK, 1 row affected (0.03 sec)

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

Спасибо

  • 0
    он будет продолжать выполнять каждый запрос в сценарии до тех пор, пока клиент не выйдет из строя или не прекратит работу mysql, или не закончатся запросы для обработки.
  • 0
    Если клиент падает или mysql умирает, я вижу это в командной строке с сообщением об ошибке или он просто продолжается бесконечно и "появляется", как будто он работает. Я просто хочу знать, чтобы, если импорт тянется часами, я не трачу свое время, не перезапуская процесс
Показать ещё 2 комментария
Теги:

4 ответа

100
Лучший ответ

Вы можете импортировать файл .sql с помощью стандартного ввода следующим образом:

mysql -u <user> -p<password> <dbname> < file.sql

Примечание: Нельзя пробежать между <-p> и <password>

Ссылка: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

Примечание для предлагаемых изменений:. Этот ответ был слегка изменен предложенными изменениями для использования параметра встроенного пароля. Я могу порекомендовать его для скриптов, но вы должны знать, что когда вы пишете пароль непосредственно в параметре (-p<password>), он может быть захвачен историей оболочки, раскрывающей ваш пароль всем, кто может прочитать файл истории. В то время как -p запрашивает ввод пароля стандартным входом.

  • 0
    О, я понимаю, но метод, который я использовал, хорошо, или это неправильно
  • 0
    Для вашего метода см. Ссылку здесь: dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html
Показать ещё 14 комментариев
44

Ребята относительно времени, затрачиваемого на импорт огромных файлов, самое главное, требуется больше времени, потому что по умолчанию mysql является "autocommit = true", вы должны установить это перед импортом своего файла, а затем проверить, как импорт работает как драгоценный камень..

Сначала откройте MySQL:

mysql -u root -p

Затем вам нужно сделать следующее:

mysql>use your_db

mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

  • 0
    Это очень круто. Мне это нравится. Часть информации тоже. Соберите все файлы sql в один файл sql с помощью этого: cat * .sql >> all_data.sql Это очень полезно. Я импортирую файл 3.5G сейчас :) Не забывайте, что таблицы должны быть MyIsam.
  • 0
    Таблица ххх не выходит ... почему
Показать ещё 4 комментария
8

+1 к @MartinNuc, вы можете запустить клиент mysql в пакетном режиме, а затем вы не увидите длинный поток строк "OK".

Время, затрачиваемое на импорт данного файла SQL, зависит от многих факторов. Не только размер файла, но и тип инструкций в нем, насколько мощный серверный сервер и сколько других функций работает одновременно.

@MartinNuc говорит, что он может загрузить 4 ГБ SQL за 4-5 минут, но я запустил файлы объемом 0,5 ГБ SQL и потребовал 45 минут на меньшем сервере.

Мы не можем догадываться, сколько времени потребуется для запуска вашего SQL script на вашем сервере.


Повторите свой комментарий,

@MartinNuc правильно, вы можете выбрать, чтобы клиент mysql печатал каждое утверждение. Или вы можете открыть второй сеанс и запустить mysql> SHOW PROCESSLIST, чтобы узнать, что работает. Но вас, вероятно, больше интересует цифра "процентная ставка" или оценка того, сколько времени потребуется для завершения остальных утверждений.

Извините, такой функции нет. Клиент mysql не знает, сколько времени потребуется для запуска более поздних операторов или даже сколько их есть. Поэтому он не может дать значимой оценки того, сколько времени потребуется для завершения.

  • 0
    Спасибо за ответ, Билл, команда, упомянутая Мартином, предоставляет какой-то вид процесса или что-то еще? Я не могу на самом деле проверить сейчас, так как мне пришлось бы отменить текущий импорт.
  • 0
    mysql --verbose чтобы увидеть каждую команду. Упоминается в ссылке dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html.
Показать ещё 3 комментария
0

Решение, которое я использую для большого восстановления sql, - это mysqldumpsplitter script. Я разделил sql.gz на отдельные таблицы. затем загрузите что-то вроде workbench mysql и обработайте его как восстановление требуемой схемы.

Вот script https://github.com/kedarvj/mysqldumpsplitter

И это работает для больших sql-восстановлений, мой средний на одном сайте, с которым я работаю, - это 2.5gb sql.gz файл, 20GB несжатый и ~ 100Gb после восстановления полностью

Ещё вопросы

Сообщество Overcoder
Наверх
Меню