Không phải công việc nào cũng cần cả cơ sở dữ liệu. Khi phát triển một tính năng ở cục bộ, bạn hiếm khi muốn một dump production đầy đủ lấp đầy đĩa và mất cả tiếng để import. Bạn muốn số ít bảng mà tính năng đó thực sự chạm tới.
Điều tương tự cũng đúng khi bạn gỡ lỗi một bảng đơn lẻ — tái hiện một vấn đề dữ liệu trong orders không đòi hỏi 126 bảng còn lại — hoặc làm một cuộc di trú từng phần, nơi chỉ vài bảng chuyển sang một dịch vụ mới. Trong tất cả các trường hợp này, câu hỏi đều giống nhau: làm sao lấy chỉ những bảng này ra khỏi một dump khổng lồ, một cách sạch sẽ và nhanh chóng?
Cách tiếp cận sed/grep và vì sao nó hỏng
Câu trả lời kinh điển là cắt file bằng sed giữa các tiêu đề mục mà mysqldump ghi cho mỗi bảng:
# trích bảng users ra khỏi một file mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql
Nó trông thông minh, và trên một dump nhỏ, gọn gàng thì có thể chạy được một lần. Trên một file 7 GB thực tế, nó rệu rã theo nhiều cách tinh vi:
- INSERT nhiều dòng. Một lệnh
INSERT INTO ... VALUEScó thể trải dài hàng nghìn dòng. Các công cụ theo dòng nhưsedvàgrepcắt đôi những dòng đó và tạo ra một file không phân tích được. - Dấu backtick và ký tự đặc biệt. Giá trị cột chứa
--, dấu chấm phẩy, backtick, dấu nháy và ký tự xuống dòng bên trong chuỗi. Mẫu của bạn khớp với văn bản nằm trong dữ liệu vốn không bao giờ được dùng làm dấu phân cách. - Tên bảng là chuỗi con. Trích
usercũng vớ luônuser_roles,user_sessionsvàpassword_user, vì cái tên xuất hiện như một chuỗi con của những bảng khác. - Chú thích và tiêu đề trôi dạt. Nội dung chú thích chính xác khác nhau giữa các phiên bản MySQL, MariaDB và PostgreSQL, còn
pg_dumpthì không dùng cùng các tiêu đề đó — nên cùng một lệnh lại lặng lẽ trả về rỗng. - Không nhận biết khóa ngoại. Kể cả khi bạn cắt
ordershoàn hảo, các dòng của nó tham chiếuusers.sedchẳng hề hay biết, nên bản trích không import được vì lỗi khóa ngoại.
Bạn kết cục chồng awk lên grep lên sed, thử trên các tập con, mà vẫn không tin nổi kết quả. Có một cách tốt hơn.
Trích bảng với DumpCleaner
DumpCleaner phân tích dump một cách đúng đắn — nó hiểu ranh giới lệnh, INSERT nhiều dòng, backtick và chú thích — nên nó luôn cắt đúng dòng. Trích các bảng bạn cần chỉ mất bốn bước:
- Kéo file
.sqlcủa bạn vào. DumpCleaner đọc file theo luồng, nên một dump 7 GB mở ra với bộ nhớ không đổi thay vì nạp cả cục. - Đọc danh sách bảng được nhận diện tự động. Mọi bảng được phân tích ra và liệt kê kèm số dòng và kích thước — không phải cuộn qua hàng triệu dòng để tìm xem có gì.
- Chọn các bảng bạn muốn. Tích
users,ordersvàproducts, hoặc gõ một mẫu regex / mẫu loại trừ như*_logsđể bỏ nguyên cả nhóm trong một lần. - Bao gồm các bảng cha khóa ngoại và export. Tùy chọn kéo vào các bảng cha được tham chiếu một cách tự động, rồi export một file gọn gàng, import được.
Vài điều khiến việc này bớt lằng nhằng hơn nhiều so với công cụ shell:
- Mẫu loại trừ như
*_logshay*_sessionsloại bỏ nhiễu từ audit và session mà không phải bỏ tích hàng chục bảng bằng tay. - Bộ lọc regex cho phép bạn khớp theo tiền tố, hậu tố hay bất kỳ mẫu nào — chẳng hạn giữ mọi thứ khớp
shop_*. - Xem trước trực tiếp cho thấy chính xác các bảng nào sẽ nằm trong đầu ra khi bạn thay đổi lựa chọn.
- Ước tính kích thước đầu ra cho bạn biết bản trích sẽ lớn cỡ nào trước khi export, nên bạn biết nó sẽ vừa với máy cục bộ.
- Phụ thuộc khóa ngoại có thể được bao gồm tự động, nên chọn
ordersâm thầm kéo theousersvà bản trích import được mà không lỗi ràng buộc.
Chỉ những bảng bạn cần — không gì khác
DumpCleaner trích các bảng cụ thể từ dump kích thước bất kỳ — xử lý theo luồng, với bộ nhớ không đổi, và tự phân giải khóa ngoại cho bạn. Ứng dụng macOS & iPadOS gốc, mua một lần.
Tải trên App StoreCâu hỏi thường gặp
Tôi có thể trích nhiều bảng cùng lúc không?
Có. Tích bao nhiêu bảng tùy thích — users, orders và products cùng nhau — và DumpCleaner ghi tất cả vào một file duy nhất trong một lượt.
Nó có giữ các phụ thuộc khóa ngoại không?
Tùy chọn, có. Bật bao gồm phụ thuộc khóa ngoại và mọi bảng cha được lựa chọn của bạn tham chiếu sẽ được kéo vào tự động, nên bản trích import được mà không lỗi ràng buộc.
Tôi có thể loại trừ bảng theo mẫu không?
Có. Dùng các mẫu loại trừ như *_logs hoặc *_sessions, hoặc một biểu thức chính quy, để bỏ nguyên cả nhóm bảng thay vì bỏ tích từng cái một.
Nó có dùng được với PostgreSQL không?
Có. DumpCleaner đọc các dump MySQL, MariaDB và PostgreSQL (pg_dump), và xử lý các tên có tiền tố schema như public.users khi trích bảng.
Đừng vật lộn với sed và grep nữa
Kéo, chọn bảng của bạn, export. DumpCleaner lấy đúng các bảng bạn cần — kèm khóa ngoại của chúng — ra khỏi bất kỳ dump nào.
Tải trên App Store