SQL 덤프에서 스키마(구조)만 내보내기

디스크에 전체 덤프가 있지만, 8,900만 행짜리 로그 테이블 없이 구조(CREATE TABLE, 인덱스, 외래 키)만 원합니다. 아니면 그 반대로, CREATE 문 없이 데이터만 원합니다. 흔한 덤프 플래그가 기존 파일에는 소용없는 이유, 그리고 구조와 데이터를 원클릭으로 분리하는 방법을 살펴봅니다.

세 가지 상황이 계속 반복됩니다:

mysqldump --no-data로 충분하지 않은 이유

고전적인 조언은 mysqldump --no-data(구조만) 또는 mysqldump --no-create-info(데이터만)입니다. 둘 다 내보내기 플래그입니다. 실행 중인 데이터베이스에서 새로 뜨는 덤프에 무엇이 담길지를 바꿀 뿐입니다. 이미 .sql 파일로 디스크에 놓여 있는 덤프에는 아무 소용이 없습니다.

실무에서는 그 파일이 다른 사람에게서, 또는 백업 작업에서, 또는 더 이상 라이브로 접근할 수 없는 서버에서 오는 경우가 잦습니다. 접근할 수 없는 데이터베이스를 상대로 mysqldump를 다시 실행할 수는 없습니다. 자격 증명이 사라졌거나, 서버가 폐기되었거나, 그 파일이 받은 전부이기 때문입니다. 그 시점에서 플래그는 무용지물이고, 결국 파일 자체를 편집하게 됩니다.

수동 방식

가장 먼저 떠오르는 방법은 grep이나 sed로 줄을 걷어내는 것입니다. 구조를 유지하고 데이터를 버리려면:

# INSERT 행만 빼고 전부 유지
grep -v '^INSERT INTO' dump.sql > schema.sql

# 또는 데이터 전용 파일을 위해 INSERT 행만 유지
grep '^INSERT INTO' dump.sql > data.sql

작고 깔끔한 덤프에서는 괜찮아 보이지만, 실제 덤프에서는 깨집니다:

결국 스키마를 얻는 대신 자기 필터를 디버깅하는 데 시간을 쓰게 됩니다.

DumpCleaner로 구조만 또는 데이터만

DumpCleaner는 줄을 매칭하는 대신 SQL 문장을 이해하므로, 크기에 상관없이 파일에서 구조와 데이터를 안정적으로 분리합니다:

  1. .sql 덤프를 DumpCleaner에 끌어다 놓습니다 (MySQL, MariaDB 또는 PostgreSQL). 스트리밍으로 파일을 파싱하므로 수 기가바이트 덤프도 일정한 메모리로 로드됩니다.
  2. 원하는 문장 유형을 켭니다: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. INSERT INTO의 체크를 해제하면 구조만 얻고, CREATE TABLE / CREATE INDEX의 체크를 해제하면 데이터만 얻습니다.
  3. 또는 프리셋을 고릅니다. 구조만 또는 데이터만을 선택하면 모든 토글이 한 번에 설정됩니다. 그런 다음 원하면 테이블별로 다듬으세요.
  4. 내보내기. 스테이징이나 CI를 위한 간결한 스키마 파일, 또는 시딩을 위한 깔끔한 데이터 전용 덤프를 얻습니다.

필터가 문장을 인식하기 때문에, 여러 줄에 걸친 확장 INSERT는 하나의 전체로 유지되거나 버려집니다. 절대 한복판에서 잘리지 않습니다.

진정한 강점은 필터링이 문장 유형별로도, 테이블별로도 작동하며, 이 둘이 결합된다는 점입니다. 모든 테이블의 구조는 유지하면서 실제로 필요한 세 개의 테이블에만 INSERT 데이터를 포함해, 8,900만 행짜리 logs 테이블은 빈 껍데기로 남길 수 있습니다. 어떤 --no-data 플래그로도 표현할 수 없는 일입니다.

구조와 데이터를 몇 초 만에 분리

DumpCleaner는 기존 덤프를 문장 유형별, 테이블별로 필터링합니다. 구조만, 데이터만, 또는 그 어떤 조합이든요. 스트리밍 방식으로 일정한 메모리를 씁니다. 네이티브 macOS & iPadOS 앱, 한 번 구매로 끝.

App Store에서 다운로드

자주 묻는 질문

스키마 없이 데이터만 내보낼 수 있나요?

네. CREATE TABLE과 CREATE INDEX를 끄고(또는 데이터만 프리셋을 고르고) INSERT INTO를 유지하세요. DumpCleaner가 행만 내보내므로, 이미 존재하는 스키마에 바로 로드할 수 있습니다.

구조만 내보내기는 인덱스와 외래 키를 유지하나요?

네. 구조만 내보내기는 CREATE TABLE, CREATE INDEX, ALTER TABLE, 그리고 외래 키 정의를 유지합니다. 데이터베이스를 정의하는 모든 것을요. INSERT 데이터 행만 제거됩니다.

섞을 수 있나요 — 모든 테이블은 구조, 일부는 데이터?

네. 필터링은 문장 유형별, 테이블별이며 둘이 결합됩니다. 모든 테이블의 구조는 유지하되 실제로 필요한 몇 개 테이블에만 INSERT 데이터를 포함하세요.

PostgreSQL에서도 동작하나요?

네. DumpCleaner는 MySQL, MariaDB, PostgreSQL 덤프를 읽고 형식을 자동으로 감지하므로, 구조만·데이터만 내보내기가 pg_dump 파일에서도 동일하게 작동합니다.

데이터 없는 스키마 — 또는 스키마 없는 데이터

끌어다 놓고, 문장 유형을 토글하고, 내보내기. DumpCleaner는 어떤 덤프든 필요한 부분만 정확히 분리합니다.

App Store에서 다운로드