Ống gunzip và mysql để gunzip một bãi chứa và nhập nó


27

Tôi có một tệp kết xuất sql .gz (ví dụ: foo.sql.gz) mà tôi muốn nhập vào cơ sở dữ liệu của mình bằng lệnh mysql cổ điển.

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

mysql -uroot -ppassword foo < foo.sql

foo là cơ sở dữ liệu.

Làm thế nào tôi có thể dẫn hai lệnh này trong một?

Đã thử

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

nhưng dường như không hoạt động; tôi cógzip: stdout: Broken pipe


6
FYI bạn thực sự không muốn vượt qua mật khẩu mysql trên dòng lệnh. Điều này dẫn đến nó được lưu trữ trong ~ / .bash_history cho tất cả mọi người xem. Nếu bạn chỉ đặt -p, nó sẽ nhắc bạn nhập mật khẩu của bạn an toàn hơn nhiều (và cũng không phá vỡ ống zcat)
thefreeman

1
Lệnh orignal của bạn sẽ hoạt động nếu gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Câu trả lời:


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

Điều này cũng sẽ để lại foo.sql.gznhư nó là.


1
Về tốc độ, công việc này chậm hơn nhiều so với gunzip && mysql -e "sử dụng unzipped.sql".
podarok

13

Đối với những người trên Max OSX có một lỗi với zcatvì vậy bạn sẽ cần phải sử dụng gzcatthay thế.

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

2

Tất cả các câu trả lời khác đều khuyên bạn nên viết mật khẩu trong lệnh. Đây là một thực tế rất xấu và gây ra rủi ro bảo mật. Xin đừng làm vậy.

Bạn có thể để trống mật khẩu trong lệnh, vì nó sẽ yêu cầu bạn nhập mật khẩu tương tác. Bằng cách này, mật khẩu không được lưu trong lịch sử bash.

gunzip < dump.sql.gz | mysql -u username -p databasename
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.