Труба gunzip і mysql, щоб gunzip звалити і імпортувати його


27

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

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

mysql -uroot -ppassword foo < foo.sql

foo - це база даних.

Як я можу передати ці дві команди в одну?

Спробував

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

але, схоже, не працює; я отримавgzip: stdout: Broken pipe


6
FYI ви дійсно не хочете передавати пароль mysql в командному рядку. Це призводить до того, що він зберігається в ~ / .bash_history, щоб усі бачили. Якщо ви просто поставите -p, він запропонує вам ввести свій пароль, який є набагато безпечнішим (і не зламає zcat pipe)
thefreeman

1
Ви оригінальна команда спрацює, якщо gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Яда

Відповіді:


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

Це також залишиться foo.sql.gzтаким, яким він є.


1
З точки зору швидкості це працює набагато повільніше, ніж gunzip && mysql -e "використовувати unzipped.sql".
подарок

13

Для тих , хто Max OSX є помилка , з zcatтак що ви повинні будете використовувати gzcatзамість цього.

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

2

Всі інші відповіді рекомендують ввести пароль у команді. Це дуже погана практика і створює ризики для безпеки. Будь ласка, НЕ робіть цього.

Ви можете залишити пароль порожнім у команді, ніж він попросить вас ввести пароль інтерактивно. Таким чином пароль не зберігається в історії баш.

gunzip < dump.sql.gz | mysql -u username -p databasename
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.