Подтвердить что ты не робот

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

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

source /var/www/myfile.sql;

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

Query OK, 1 row affected (0.03 sec)

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

Спасибо

4b9b3361

Ответ 1

Вы можете импортировать файл .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 запрашивает ввод пароля стандартным входом.

Ответ 2

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

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

mysql -u root -p

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

mysql>use your_db

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

Ответ 3

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

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

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

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


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

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

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

Ответ 4

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

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

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