MYSQL chỉ đổ một số hàng nhất định


95

Tôi đang cố gắng thực hiện kết xuất mysql của một vài hàng trong cơ sở dữ liệu của mình. Sau đó, tôi có thể sử dụng kết xuất để tải một vài hàng đó lên cơ sở dữ liệu khác. Đoạn mã tôi có đang hoạt động, nhưng nó hủy mọi thứ. Làm cách nào tôi có thể yêu cầu mysqldump chỉ kết xuất các hàng nhất định của bảng?

Đây là mã của tôi:


mysqldump --opt --user=username --password=password lmhprogram myResumes  --where=date_pulled='2011-05-23' > test.sql

Câu trả lời:


141

Chỉ cần sửa chữa --wheretùy chọn của bạn . Nó phải là một mệnh đề SQL WHERE hợp lệ, như:

--where="date_pulled='2011-05-23'"

Bạn có tên cột bên ngoài dấu ngoặc kép.


1
Cảm ơn đã làm chính xác những gì tôi cần. Cảm ơn bạn vì sự giúp đỡ!
Shattuck

@AJ, thông tin tuyệt vời! Cảm ơn!
Roman Newaza

2
Đối với điều kiện IN , chúng ta có thể đơn giản sử dụng --where="id IN(1,2,6,10)". Trong đó id là cột trong bảng. Tham khảo --where
Yogesh

9
Chỉ cần lưu ý cho bất kỳ ai như tôi sử dụng điều này để chuyển một --no-create-infokho dữ liệu lớn đến một máy chủ khác bị hỏng ở giữa, nếu bạn không chỉ định cùng với mệnh đề where của mình, kết xuất mới sẽ tạo lại bảng và xóa dữ liệu đã được chuyển! Có thể rõ ràng nhưng nó đã bắt tôi hai lần.
georgiecasey

Lưu ý rằng vấn đề không phải là tên cột nằm ngoài dấu ngoặc kép. Đây là một lệnh shell, vì vậy bạn cần viết cú pháp shell cho chuỗi date_pulled='2011-05-23'. Điều đó có nghĩa là bạn cần phải trích dẫn hoặc thoát khỏi các ký tự trích dẫn đơn lẻ, vì vậy chúng được bao gồm trong chuỗi thay vì được hiểu là dấu ngoặc kép trong cú pháp shell. Thêm dấu ngoặc kép xung quanh toàn bộ điều đó sẽ làm được điều đó, nhưng cũng sẽ --where=date_pulled="'2011-05-23'"(hoặc --where=date_pulled=\'2011-05-23\', hoặc thậm chí --where=date_pulled"'"2011-05-23"'").
Ben

32

Bạn cần trích dẫn mệnh đề "where".

Thử

mysqldump --opt --user=username --password=password lmhprogram myResumes  --where="date_pulled='2011-05-23'" > test.sql

1
Đó chính xác là những gì tôi cần. Một người khác đã trả lời ngay trước bạn và tôi đã chọn câu trả lời của anh ấy, nhưng tôi đã ủng hộ bạn nhờ sự trợ giúp.
Shattuck

1
Có một cách khác bằng cách sử dụng truy vấn như sau: TẠO BẢNG new_table AS (SELECT * FROM myResumes WHERE where = date_pulled = '2011-05-23'); Sau đó, bạn chỉ cần xuất bảng này qua mysqldump.
Vinayagam

1

Sử dụng mã này cho các hàng bảng cụ thể, sử dụng điều kiện LIKE.

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
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.