Как загрузить файл sql.gz в мою базу данных? (Импорт)


151

Я пытаюсь импортировать сжатый файл SQL в MySQL напрямую. Это правильный путь?

mysql -uroot -ppassword mydb > myfile.sql.gz

14
Даже игнорируя gzip-сторону вопроса, ваша стрелка указывает на неправильный путь ...
Мэтт Флетчер,

Ответы:


238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>запишет вывод mysqlкоманды stdoutв файл, myfile.sql.gzкоторый, скорее всего, не тот, который вы хотите. Кроме того, эта команда запросит у вас пароль пользователя MySQL «root».


15
В качестве хорошей практики безопасности я бы поставил свой пароль в командной строке, я бы разрешил MySQL запросить его.
Профессор Мориарти

9
Или даже лучше: создать ~/.my.cnfс учетными данными. ;)
Йоси

5
Как @Prof. Мориарти объясняет, вы можете изменить команду, чтобы не использовать пароль через zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Он будет знать, что последний параметр - это база данных, которую вы хотите использовать, а не ваш пароль.
Бафромка

6
Чтобы немного исправить комментарий @ Prof.Moriarty, хорошей практикой безопасности было бы не помещать мой пароль в командную строку (где он будет храниться в истории или просматриваться через ваше плечо) и позволять MySQL запрашивать его. Один только флаг -p заставит MySQL запросить пароль.
Джордж

4
+1 за то, что оставляет этот чертов дамп базы данных сжатым
Дмитрий БД

82

Чтобы отобразить индикатор выполнения при импорте файла sql.gz, загрузите pvи используйте следующее:

pv mydump.sql.gz | gunzip | mysql -u root -p

В CentOS / RHEL вы можете установить pv с помощью yum install pv.

В Debian / Ubuntu apt-get install pv.

В MAC, brew install pv


2
pvВ репозитории Ubuntu, кажется, тоже (по крайней мере, в 12.04 LTS это так), но опять же, вам нужно сделать это, sudo apt-get install pvчтобы получить его. Благодаря Banjer, это идеально подходит для импорта больших баз данных!
toon81

Я должен был запустить pv mydump.sql.gz | ружье | mysql -u root my_database_name. Это было потому, что я импортировал таблицы, и у меня не установлен пароль для пользователя root
Криштиану Мендонса,

В MAC,brew install pv
оценка

54

Самый простой способ - разархивировать файл базы данных перед импортом. Также как упомянуто @Prof. Мориарти, вы не должны указывать пароль в команде (вам будет предложено ввести пароль). Эта команда, взятая из webcheatsheet , разархивирует и импортирует базу данных за один раз:

gunzip < myfile.sql.gz | mysql -u root -p mydb

1
Кроме того, mydb необходимо создать перед импортом. Это не создает БД для вас.
Сиддхартха

я обнаружил, что мой трубопровод gunzipв сжатом файле размером 10 ГБ привел к зависанию импорта. не уверен, что это из-за ограничений памяти или чего-то еще, но я бы ошибся, если бы в будущем делал один шаг за раз.
Райан Так

@RyanTuck Это расширяет границы подобных процессов :)
icc97

@Siddhartha Это зависит от файла дампа sql. Иногда они включают в себя создание базы данных операторов.
Роби

@ Rooby это имеет смысл.
Сиддхартха


5

На macOS я использовал это:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

Введите свой пароль, и вуаля!


4

Также проверьте, есть ли какой-либо оператор USE в файле SQL. Указание базы данных в командной строке не гарантирует, что данные окажутся там, если в файле SQL указано другое место назначения.


2
Вам просто нужно расширить команду следующим образом: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. Принятый ответ использует этот подход.
Bafromca

1

Для сжатых файлов bzip2 (.sql.bz2) используйте:

bzcat <file> | mysql -u <user> -p <database>

ИЛИ ЖЕ

pv <file> | bunzip2 | mysql -u <user> -p <database>

чтобы увидеть индикатор выполнения.


0

Вы можете использовать -c, --stdout, --to-stdoutопцию gunzipкоманды

например:

gunzip -c file.sql.gz | mysql -u root -p database
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.