Làm cách nào để tải tệp sql.gz vào cơ sở dữ liệu của tôi? (nhập khẩu)


150

Tôi đang cố gắng nhập trực tiếp một tệp SQL được nén vào mysql. Đây có phải là hướng đi đúng?

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

14
Ngay cả khi bỏ qua phía gzip của câu hỏi, mũi tên của bạn đang chỉ sai hướng ...
Matt Fletcher

Câu trả lời:


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

>sẽ ghi đầu ra của mysqllệnh stdoutvào tập tin myfile.sql.gzmà có lẽ không phải là điều bạn muốn. Ngoài ra, lệnh này sẽ nhắc bạn nhập mật khẩu của người dùng MySQL "root".


15
Là một thực hành bảo mật tốt, tôi sẽ đặt mật khẩu của mình vào dòng lệnh, tôi sẽ để mysql yêu cầu.
Giáo sư Moriarty

9
Hoặc thậm chí tốt hơn: tạo ~/.my.cnfvới các thông tin. ;)
joschi

5
Như @Prof. Moriarty khám phá, bạn có thể sửa đổi lệnh để không sử dụng mật khẩu thông qua zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Nó sẽ biết tham số cuối cùng là cơ sở dữ liệu bạn muốn sử dụng, không phải mật khẩu của bạn.
bafromca

6
Để sửa một chút nhận xét của @ Prof.Moriarty, một thực hành bảo mật tốt sẽ là không đặt mật khẩu của tôi vào dòng lệnh (nơi nó sẽ được lưu trữ trong lịch sử hoặc nhìn qua vai bạn) và để MySQL yêu cầu. Chỉ cờ -p sẽ khiến MySQL hỏi tại một dấu nhắc nhập mật khẩu.
George

4
+1 cho thứ gì đó khiến cơ sở dữ liệu chết tiệt bị nén
Dmitri DB

81

Để hiển thị thanh tiến trình trong khi nhập tệp sql.gz, hãy tải xuống pvvà sử dụng như sau:

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

Trong CentOS / RHEL, bạn có thể cài đặt pv với yum install pv.

Trong Debian / Ubuntu apt-get install pv.

Trong MAC, brew install pv


2
pvdường như cũng có trong repos Ubuntu (ít nhất là trong 12.04 LTS), nhưng một lần nữa bạn cần phải làm sudo apt-get install pvđể có được nó. Cảm ơn Banjer, điều này là hoàn hảo cho nhập khẩu cơ sở dữ liệu lớn!
toon81

Tôi đã phải chạy pv mydump.sql.gz | súng ngắn | gốc mys mys -u my_database_name. Đó là bởi vì tôi đang nhập bảng và tôi không có mật khẩu được đặt cho người dùng root của mình
Cristiano Mendonça

Trong MAC,brew install pv
điểm số

54

Cách đơn giản nhất là giải nén tệp cơ sở dữ liệu trước khi nhập. Cũng như được đề cập bởi @Prof. Moriarty bạn không nên chỉ định mật khẩu trong lệnh (bạn sẽ được hỏi mật khẩu). Lệnh này được lấy từ webchcoateet sẽ giải nén và nhập cơ sở dữ liệu trong một lần:

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

1
Ngoài ra, mydb cần phải được tạo trước khi nhập. Điều này không tạo ra db cho bạn.
Siddhartha

tôi tìm thấy đường ống của mình gunziptrên một tệp nén 10 GB khiến quá trình nhập của tôi bị đóng băng. không chắc đó có phải là do hạn chế về bộ nhớ hay không nhưng tôi sẽ thất bại trong việc thực hiện từng bước một trong tương lai.
Ryan Tuck

@RyanTuck Điều đó đang đẩy các giới hạn của các loại quy trình này :)
icc97

@Siddhartha Điều đó phụ thuộc vào tệp kết xuất sql. Đôi khi chúng bao gồm tạo báo cáo cơ sở dữ liệu.
rooby

@rooby mà có ý nghĩa.
Siddhartha


5

Trên macOS, tôi đã sử dụng điều này:

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

Nhập mật khẩu của bạn và thì đấy!


4

Đồng thời kiểm tra xem có bất kỳ câu lệnh USE nào trong tệp SQL không. Việc chỉ định cơ sở dữ liệu tại dòng lệnh không đảm bảo rằng dữ liệu kết thúc ở đó nếu một đích khác được chỉ định trong tệp SQL.


2
Bạn chỉ cần mở rộng lệnh như vậy : pv mydump.sql.gz | gunzip | mysql -u root -p your_database. Câu trả lời được chấp nhận sử dụng phương pháp này.
bafromca

1

Đối với các tệp nén bzip2 (.sql.bz2), hãy sử dụng:

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

HOẶC LÀ

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

để xem thanh tiến trình.


0

Bạn có thể sử dụng -c, --stdout, --to-stdouttùy chọn gunziplệnh

ví dụ:

gunzip -c file.sql.gz | mysql -u root -p database
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.