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

19068
apelliciari

У меня есть файл дампа .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

24
FYI you really do not want to pass the mysql password on the command line. This leads to it being stored in ~/.bash_history for all to see. If you just put -p it will prompt you to enter your password which is much safer (and doesn't break the zcat pipe either) thefreeman 11 лет назад 6
Ваша оригинальная команда будет работать, если gunzip <foo.sql.gz | mysql -uroot -ppassword foo Yada 11 лет назад 1

3 ответа на вопрос

36
Nifle
zcat foo.sql.gz | mysql -uroot -ppassword foo 

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

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

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

gzcat foo.sql.gz | mysql -uroot -ppassword foo 
0
Елин Й.

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

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

gunzip < dump.sql.gz | mysql -u username -p databasename