Труба gunzip и mysql, чтобы gunzip свалка и импортировать ее


27

У меня есть файл дампа .gz sql (пример: foo.sql.gz), который я хочу импортировать в свою базу данных с помощью классической команды mysql.

gunzip -c foo.sql.gz > foo.sql

mysql -uroot -ppassword foo < foo.sql

фу это база данных.

Как я могу передать эти две команды в одну?

Пытался

gunzip -c foo.sql.gz | mysql -uroot -ppassword foo

но, похоже, не работает; я получилgzip: stdout: Broken pipe


6
К вашему сведению, вы действительно не хотите передавать пароль mysql в командной строке. Это приводит к его сохранению в ~ / .bash_history для всеобщего обозрения. Если вы просто введете -p, он предложит вам ввести пароль, который намного безопаснее (и не нарушает и канал zcat)
thefreeman

1
Ваша оригинальная команда будет работать, если gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Ответы:


40
zcat foo.sql.gz | mysql -uroot -ppassword foo

Это также оставит foo.sql.gzкак есть.


1
С точки зрения скорости это работает намного медленнее, чем gunzip && mysql -e "use unzipped.sql".
подарок

13

Для тех , кто Max OSX есть ошибка , с zcatтак что вы должны будете использовать gzcatвместо этого.

gzcat foo.sql.gz | mysql -uroot -ppassword foo

2

Все остальные ответы рекомендуют написать пароль в команде. Это очень плохая практика и создает угрозу безопасности. Пожалуйста, НЕ ДЕЛАЙТЕ этого.

Вы можете оставить пароль пустым в команде, после чего он попросит вас ввести пароль в интерактивном режиме. Таким образом, пароль не сохраняется в истории Bash.

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