Chỉ export schema (cấu trúc) từ một SQL dump

Bạn có một dump đầy đủ trên đĩa, nhưng chỉ muốn phần cấu trúc — CREATE TABLE, index, khóa ngoại — mà không có các bảng log 89 triệu dòng. Hoặc ngược lại: chỉ phần dữ liệu, không có lệnh CREATE. Đây là lý do các cờ dump thông thường không giúp được cho một file có sẵn, và cách tách cấu trúc khỏi dữ liệu trong một cú nhấp.

Ba tình huống cứ liên tục lặp lại:

Vì sao mysqldump --no-data là chưa đủ

Lời khuyên kinh điển là mysqldump --no-data (chỉ cấu trúc) hoặc mysqldump --no-create-info (chỉ dữ liệu). Cả hai đều là cờ export: chúng thay đổi nội dung của một dump mới từ một cơ sở dữ liệu đang chạy. Chúng không làm được gì cho một dump bạn đã có sẵn nằm trên đĩa dưới dạng file .sql.

Trên thực tế, file thường đến từ người khác, hoặc từ một job sao lưu, hoặc từ một máy chủ bạn không còn quyền truy cập trực tiếp. Bạn không thể chạy lại mysqldump trên một cơ sở dữ liệu không kết nối được — thông tin đăng nhập đã mất, máy chủ đã ngừng hoạt động, hoặc file đơn giản là tất cả những gì bạn được trao. Đến lúc đó thì các cờ vô dụng, và bạn còn lại việc chỉnh sửa chính cái file.

Cách làm thủ công

Nước đi hiển nhiên là loại các dòng bằng grep hoặc sed. Để giữ cấu trúc và bỏ dữ liệu:

# giữ mọi thứ trừ các dòng INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# hoặc chỉ giữ các dòng INSERT cho một file chỉ-dữ-liệu
grep '^INSERT INTO' dump.sql > data.sql

Cách này trông ổn trên một dump nhỏ, gọn gàng — rồi hỏng trên một dump thật:

Bạn kết cục đi gỡ lỗi cho bộ lọc của chính mình thay vì lấy được schema.

Chỉ-cấu-trúc hoặc chỉ-dữ-liệu với DumpCleaner

DumpCleaner hiểu các lệnh SQL thay vì khớp theo dòng, nên nó tách cấu trúc khỏi dữ liệu một cách đáng tin cậy — trên file kích thước bất kỳ:

  1. Kéo file .sql của bạn vào DumpCleaner (MySQL, MariaDB hoặc PostgreSQL). Nó phân tích file theo luồng, nên một dump nhiều gigabyte nạp vào với bộ nhớ không đổi.
  2. Bật/tắt các loại lệnh bạn muốn: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Bỏ tích INSERT INTO là bạn có chỉ-cấu-trúc; bỏ tích CREATE TABLE / CREATE INDEX là bạn có chỉ-dữ-liệu.
  3. Hoặc chọn một preset — Chỉ cấu trúc hoặc Chỉ dữ liệu — để đặt mọi công tắc trong một bước, rồi tinh chỉnh theo từng bảng nếu bạn muốn.
  4. Export. Bạn có một file schema tinh gọn cho staging hay CI, hoặc một dump chỉ-dữ-liệu sạch sẽ để mồi dữ liệu.

Vì bộ lọc nhận biết theo lệnh, một extended INSERT nhiều dòng được giữ hoặc bỏ như một khối trọn vẹn — không bao giờ bị cắt giữa chừng.

Sức mạnh thực sự là việc lọc hoạt động theo từng loại lệnhtheo từng bảng, và hai điều đó kết hợp với nhau. Bạn có thể giữ cấu trúc của mọi bảng nhưng chỉ bao gồm dữ liệu INSERT cho ba bảng bạn thực sự cần — để lại bảng logs 89 triệu dòng như một cái vỏ rỗng. Đó là điều không một cờ --no-data nào diễn tả được.

Tách cấu trúc khỏi dữ liệu trong vài giây

DumpCleaner lọc một dump có sẵn theo loại lệnh và theo bảng — chỉ cấu trúc, chỉ dữ liệu, hay bất kỳ kết hợp nào — xử lý theo luồng, với bộ nhớ không đổi. Ứng dụng macOS & iPadOS gốc, mua một lần.

Tải trên App Store

Câu hỏi thường gặp

Tôi có thể export dữ liệu mà không có schema không?

Có. Tắt CREATE TABLE và CREATE INDEX (hoặc chọn preset Chỉ dữ liệu) và giữ INSERT INTO. DumpCleaner chỉ export các dòng, sẵn sàng nạp vào một schema đã tồn tại.

Bản export chỉ-cấu-trúc có giữ index và khóa ngoại không?

Có. Chỉ cấu trúc giữ CREATE TABLE, CREATE INDEX, ALTER TABLE và các định nghĩa khóa ngoại — mọi thứ định nghĩa cơ sở dữ liệu. Chỉ các dòng dữ liệu INSERT bị loại bỏ.

Tôi có thể kết hợp — cấu trúc cho mọi bảng, dữ liệu cho một số bảng — không?

Có. Việc lọc là theo từng loại lệnh và theo từng bảng, và cả hai kết hợp được. Giữ cấu trúc của mọi bảng nhưng chỉ bao gồm dữ liệu INSERT cho vài bảng bạn thực sự cần.

Cách này có dùng được với PostgreSQL không?

Có. DumpCleaner đọc các dump MySQL, MariaDB và PostgreSQL và nhận diện định dạng tự động, nên export chỉ-cấu-trúc và chỉ-dữ-liệu hoạt động y như nhau cho các file pg_dump.

Schema không có dữ liệu — hoặc dữ liệu không có schema

Kéo, bật/tắt các loại lệnh, export. DumpCleaner tách bất kỳ dump nào thành đúng phần bạn cần.

Tải trên App Store