mysqldump를 사용하여 MySQL에서 특정 테이블을 백업하는 방법

1. 소개

MySQL은 많은 웹사이트와 애플리케이션에서 널리 사용되는 데이터베이스 관리 시스템입니다. 그 도구 중 mysqldump 명령은 데이터베이스 백업을 만들고 마이그레이션을 처리하는 데 필수적입니다. 이 명령은 대용량 데이터베이스에서 특정 테이블만 백업해야 할 때 특히 유용합니다.

이 글에서는 mysqldump 명령을 사용해 특정 테이블만 덤프하는 방법을 자세히 설명합니다. 가이드가 초보자에게 친절하지만, 중급 사용자를 위한 고급 옵션과 실용적인 사용 사례도 다룹니다.

2. mysqldump 명령의 기본 구문

먼저 mysqldump 명령의 기본 사용법을 살펴보겠습니다. 이 명령은 전체 데이터베이스 또는 선택한 테이블의 구조와 데이터를 덤프(백업)하는 데 사용됩니다.

기본 구문

사용자 이름, 비밀번호, 데이터베이스 이름, 테이블 이름을 지정하면 아래와 같이 특정 테이블을 백업할 수 있습니다:

mysqldump -u username -p database_name table_name > output_file.sql
  • -u : 데이터베이스 사용자 이름 지정
  • -p : 데이터베이스 비밀번호 입력을 요청
  • database_name : 덤프할 데이터베이스 이름
  • table_name : 덤프할 특정 테이블 이름
  • > output_file.sql : 덤프가 저장될 출력 파일

자주 사용하는 옵션

  • --single-transaction : InnoDB 테이블을 백업할 때 트랜잭션 일관성을 보장
  • --skip-lock-tables : 백업 과정에서 테이블 잠금을 방지

3. 특정 테이블 덤프하기

단일 테이블 덤프

단일 테이블만 백업하려면 데이터베이스 이름 뒤에 테이블 이름을 지정합니다. 예를 들어, 다음 명령은 users 테이블만 덤프합니다:

mysqldump -u root -p my_database users > users_dump.sql

이 명령은 my_database 데이터베이스의 users 테이블 구조와 데이터를 users_dump.sql 파일에 저장합니다.

여러 테이블 덤프

여러 테이블을 한 번에 백업하려면 테이블 이름을 공백으로 구분하여 나열합니다:

mysqldump -u root -p my_database users orders products > multiple_tables_dump.sql

이 명령은 users, orders, products 테이블을 함께 덤프합니다.

테이블 목록 사용

테이블 수가 많을 경우 모든 테이블 이름을 직접 입력하기 번거로울 수 있습니다. 이때 SHOW TABLES 명령이나 스크립트를 사용해 자동으로 덤프할 테이블 목록을 생성할 수 있습니다:

mysql -u root -p my_database -N -e "SHOW TABLES LIKE 'hoge%'" > table_list.txt
mysqldump -u root -p my_database `cat table_list.txt` > partial_dump.sql

이 방법을 사용하면 특정 패턴에 맞는 테이블만 효율적으로 백업할 수 있습니다.

4. 옵션 및 고급 사용법

mysqldump 명령에는 필요에 따라 백업을 맞춤 설정할 수 있는 다양한 옵션이 포함되어 있습니다. 아래는 유용한 사례 몇 가지입니다.

구조만 덤프

데이터 없이 테이블 구조만 필요하면 --no-data 옵션을 사용합니다:

mysqldump -u root -p my_database --no-data users > users_structure.sql

이 명령은 users 테이블의 구조만 덤프합니다.

데이터만 덤프

테이블 구조 없이 데이터만 필요하면 --no-create-info 옵션을 사용합니다:

mysqldump -u root -p my_database --no-create-info users > users_data.sql

이 명령은 users 테이블의 데이터만 덤프합니다.

조건부 덤프

--where 옵션을 사용하면 특정 조건에 맞는 행만 덤프할 수 있습니다. 예를 들어 id가 100보다 큰 행만 덤프하려면 다음과 같이 합니다:

mysqldump -u root -p my_database users --where="id > 100" > users_filtered_dump.sql

대용량 테이블에서 필요한 데이터 부분만 백업할 때 유용합니다.

5. 실용 예제

사용 사례 1: 단일 테이블 백업

예를 들어 employees 데이터베이스의 salary 테이블만 백업하려면 다음과 같이 합니다:

mysqldump -u root -p employees salary > salary_dump.sql

사용 사례 2: 조건을 지정한 데이터 백업

(여기에 해당 명령이나 스크립트를 추가하십시오)

데이터의 일부만 덤프하려면 --where 옵션을 사용하십시오. 예를 들어, users 테이블에서 id가 100보다 큰 행만 백업하려면 다음과 같이 합니다:

mysqldump -u root -p my_database users --where="id > 100" > users_partial_dump.sql

6. 모범 사례 및 고려 사항

테이블 잠금 문제 방지

mysqldump를 사용할 때 테이블이 잠겨 다른 작업을 방해할 수 있습니다. 운영 환경에서는 --single-transaction 옵션을 사용하여 다운타임을 방지하는 것이 권장됩니다. InnoDB 테이블의 경우 --skip-lock-tables와 함께 사용하면 더욱 안전합니다.

대용량 데이터 처리

매우 큰 데이터베이스의 경우 덤프 과정에 오랜 시간이 걸릴 수 있습니다. 일반적인 방법은 gzip을 사용해 실시간으로 출력물을 압축하는 것입니다:

mysqldump -u root -p my_database | gzip > backup_$(date +%Y%m%d).sql.gz

이 명령은 덤프가 생성되는 동안 압축하여 디스크 공간을 절약합니다.

7. 결론

이 문서에서는 mysqldump 명령을 사용해 특정 테이블을 덤프하는 방법을 다루었습니다. 기본 구문부터 조건부 덤프, 구조만 또는 데이터만 내보내기, 스크립트를 이용한 자동화까지 다양한 사용 사례를 살펴보았습니다. mysqldump 명령은 적절히 사용하면 데이터베이스 백업 및 마이그레이션을 훨씬 쉽게 만들어 주는 강력한 도구입니다.

다음 기사에서는 더 고급 mysqldump 옵션을 살펴보고 다른 데이터베이스 백업 도구와 비교해 보겠습니다.