MySQL kết xuất bằng truy vấn


220

Có thể làm mysqldumpbằng cách độc thân SQL query?

Tôi có nghĩa là để đổ toàn bộ cơ sở dữ liệu, giống như phpmyadminkhi bạn xuất sangSQL

Câu trả lời:


285

không phải mysqldump, mà là ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

bạn có thể chuyển hướng nó ra một tập tin nếu bạn muốn:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

Cập nhật: Bài viết gốc hỏi liệu anh ta có thể kết xuất từ ​​cơ sở dữ liệu bằng truy vấn không. Những gì anh ấy hỏi và những gì anh ấy có nghĩa là khác nhau. Anh ấy thực sự muốn chỉ mysqldump tất cả các bảng.

mysqldump --tables myTable --where="id < 1000"

22
Làm thế nào để khôi phục tập tin txt bị đổ này?
Vivek S

3
cho những người đang thử phương pháp mysql -e. Tôi đã phải tùy chỉnh kịch bản một chút để làm việc cho tôi. Cái này yêu cầu bạn nhập mật khẩu sql khi chạy. mysql -e "select * từ bảng WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11

13
bạn chỉ có thể tạo một bảng mới cho truy vấn (CREATE TABLE SELECT), sau đó kết xuất bảng đó với mysqldump. Bằng cách đó bạn có thể dễ dàng khôi phục nó sau này.
quano

1
cho những ai muốn sử dụng mysqldump và khôi phục tập tin, hãy xem tại đây: stackoverflow.com/a/2431936/411786
Syco

2
Để nhập dữ liệu được xuất bằng mysql -e với tùy chọn -B để xuất dưới dạng phân tách bằng tab, hãy chạy mysqlimport --ignore-lines = 1 --fields-terminating-by = '\ t'. Xem: stackoverflow.com/a/17071108/1676044
Kevin

259

Điều này sẽ làm việc

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
Một ví dụ tốt hơn có thể là một cái gì đó thực sự trông giống như một mệnh đề where, chẳng hạn như --where = "myColumn <1000" - hàng triệu hàng đầu tiên của mỗi bảng có vẻ như là một điều kỳ lạ để yêu cầu;)
ijw

@ijw Nếu những gì bạn muốn làm là lấy một bản sao lưu dễ dàng có thể tái xác nhận của bảng của bạn, có lẽ bạn không cần một mệnh đề where cho bất cứ điều gì khác ngoài giới hạn.
Thomas Ahle

3
@Sagotharan: Chà, nó không phải là một truy vấn. Đó có lẽ là lý do.
Các cuộc đua nhẹ nhàng trong quỹ đạo

79
!!CẢNH BÁO!! mysqldump thêm lệnh 'DROP TABLE' ở đầu tệp đã xuất. Điều đó có nghĩa là nếu bạn thực hiện xuất một phần sau đó nhập lại, bạn sẽ mất mọi thứ khác. Vâng, tôi đã làm.
Tamlyn

34
Có, để không xóa tất cả dữ liệu trong bảng của bạn khi khôi phục từ tệp dữ liệu đã lưu, hãy đảm bảo bạn thêm vào --no-create-infotùy chọn. Xem câu trả lời của tôi cho một ví dụ.
Gary

71

Bạn có thể kết xuất một truy vấn dưới dạng csv như thế này:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

8
Nếu tôi muốn đổ nhiều bảng.
CUỘC SỐNG

10
Điều này tạo ra một tệp trên máy mà cơ sở dữ liệu MySQL đang chạy. Vì vậy, nếu bạn đang truy vấn từ bảng điều khiển từ xa thì phương pháp này không thành công. Nếu có một cách để làm điều đó từ một bảng điều khiển từ xa, xin vui lòng cho tôi biết về nó.
biết

2
Nó lưu tập tin ở đâu?
Techlord

1
@dknight Tôi giả sử bạn có nghĩa là bảng điều khiển từ xa thông qua bảng điều khiển đầu cuối, trong trường hợp đó bạn có thể truy xuất tệp bị đổ qua scpsau khi kết nối bị chấm dứt. đây là một ví dụ scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
Luke

Có vẻ như không an toàn: # 1290 - Máy chủ MySQL đang chạy với tùy chọn --secure-file-private để nó không thể thực thi câu lệnh này
mikep

64

Kết xuất bảng bằng truy vấn where:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

Kết xuất toàn bộ bảng:

mysqldump mydatabase mytable > data.sql

Ghi chú:

  • Thay thế mydatabase, mytablevà các nơi tuyên bố với các giá trị mong muốn của bạn.
  • Theo mặc định, mysqldumpsẽ bao gồm DROP TABLECREATE TABLEbáo cáo trong đầu ra của nó. Do đó, nếu bạn không muốn xóa tất cả dữ liệu trong bảng của mình khi khôi phục từ tệp dữ liệu đã lưu, hãy đảm bảo bạn sử dụng --no-create-infotùy chọn.
  • Bạn có thể cần phải thêm thích hợp -h, -u-ptùy chọn để các lệnh ví dụ trên để xác định mong muốn của bạn máy chủ cơ sở dữ liệu, người sử dụng và mật khẩu tương ứng.

38

Bạn có thể sử dụng tùy chọn --where trên mysqldump để tạo đầu ra mà bạn đang chờ:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

Tối đa 100 hàng từ test.t1 sẽ được kết xuất từ ​​bảng cơ sở dữ liệu.

Chúc mừng, WB


6

Nếu bạn muốn xuất số lượng bản ghi n cuối cùng của mình thành một tệp, bạn có thể chạy như sau:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

Ở trên sẽ lưu 100 bản ghi cuối cùng vào export_file.sql, giả sử bảng bạn đang xuất có cột id tự động tăng.

Bạn sẽ cần thay đổi giá trị người dùng, localhost, cơ sở dữ liệu và bảng. Bạn có thể tùy ý thay đổi cột id và xuất tên tệp.


5

MySQL Workbench cũng có tính năng này gọn gàng trong GUI. Chỉ cần chạy truy vấn, nhấp vào biểu tượng lưu bên cạnh Xuất / Nhập:

nhập mô tả hình ảnh ở đây

Sau đó chọn "Câu lệnh SQL INSERT (* .sql)" trong danh sách.

nhập mô tả hình ảnh ở đây

Nhập tên, nhấp vào lưu, xác nhận tên bảng và bạn sẽ có tệp kết xuất của mình.


3

Kết hợp nhiều thứ ở trên là ví dụ thực tế thực tế của tôi, chọn các bản ghi dựa trên cả mét và dấu thời gian. Tôi đã cần lệnh này trong nhiều năm. Thực hiện nhanh chóng.

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql

-1

mysql Xuất kết quả truy vấn dòng lệnh

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

nó đang hoạt động với tôi trong ubfox, lệnh: mysql -h localhost -u root -p dbname -e "select * từ người dùng trong đó id = 1; select * từ staff trong đó id = 1" --xml> / var / www / html / dự án / sao lưu / db.xml
Ramesh
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.