Câu trả lời:
Như skaffman nói, sử dụng --tại đó lựa chọn:
mysqldump --opt --where="1 limit 1000000" database
Tất nhiên, điều đó sẽ cung cấp cho bạn hàng triệu hàng đầu tiên từ mỗi bảng.
SELECT * from table WHERE
, vì vậy trong trường hợp này bạn sẽ nhận được SELECT * from table WHERE 1 limit 1000000
. Nếu không có 1, bạn sẽ có một truy vấn không hợp lệ. Chỉ định 1 cho mệnh đề where (vì 1 luôn luôn đúng) chỉ cần chọn tất cả các bản ghi.
mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
để có được trang thứ hai của 1 triệu bản ghi. Đảm bảo sử dụng cờ --no-tạo-thông tin trên các trang không phải là trang đầu tiên để chỉ xóa dữ liệu và bỏ qua phần tạo bảng .
Nếu bạn muốn lấy n
bản ghi từ một bảng cụ thể, bạn có thể làm một cái gì đó như thế này:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
Điều này sẽ kết xuất các 1000000
hàng đầu tiên từ bảng có tên table
vào tệp dump.sql
.
mysqldump có thể được cung cấp một truy vấn SQL để thực thi, từ đó nó sẽ lấy dữ liệu cho kết xuất. Sau đó, bạn có thể sử dụng mệnh đề "giới hạn X" trong truy vấn của mình để hạn chế số lượng hàng.
Vì thứ tự mặc định là ASC hiếm khi bạn muốn trong tình huống này, bạn cần phải có một thiết kế cơ sở dữ liệu phù hợp để làm cho DESC hoạt động tốt. Nếu tất cả các bảng của bạn có MỘT cột khóa chính có cùng tên (tự nhiên hoặc thay thế), bạn có thể dễ dàng kết xuất n bản ghi mới nhất bằng cách sử dụng:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
Đây là một lý do hoàn hảo cho lý do tại sao bạn phải luôn đặt tên cho id của PK và tránh các PK tổng hợp, ngay cả trong các bảng kết hợp (thay vào đó sử dụng các khóa thay thế).