MySQL 백업 및 복원 방법 간략 설명

백업

mysqldump를 이용한 백업

  • 온라인 상태에서도 가능하며, 전체 또는 특정 데이터베이스/테이블의 백업을 지원.
  • 논리적 SQL 스크립트로 출력되므로 파일 크기가 작고 가독성이 뛰어남.
  • 성능은 다소 낮으며, 대용량 데이터 처리 시 시간이 소요됨.

기본 백업 명령어 구성

mysqldump [옵션] [데이터베이스명] [테이블명...] > 파일명.sql
mysqldump [옵션] --databases [데이터베이스명...] > 파일명.sql
mysqldump [옵션] --all-databases > 파일명.sql

주요 옵션 설명

  • -h 또는 --host: 데이터베이스 서버 주소 (로컬일 경우 생략 가능)
  • -P 또는 --port: 포트 번호 지정
  • -B 또는 --databases: 하나 이상의 데이터베이스를 백업할 때 사용. 이후에 테이블 이름도 포함 가능.
  • -A 또는 --all-databases: 모든 데이터베이스(기본 시스템 테이블 포함)를 백업.
  • --single-transaction: 트랜잭션 모드로 실행하여 테이블 잠금 없이 일관된 데이터 추출.
  • --no-data 또는 -d: 데이터는 제외하고 스키마만 백업.
  • --ignore-table=데이터베이스.테이블: 특정 테이블을 제외하고 백업.
  • --tables: 지정된 테이블만 별도로 백업.

실제 예시

# 특정 데이터베이스 전체 백업
mysqldump -uadmin -psecret --databases myapp_db > backup_20240818.sql

# 원격 서버에서 전체 데이터베이스 백업
mysqldump -h 192.168.1.100 -P 3306 -uadmin -psecret --all-databases > full_backup.sql

# 특정 데이터베이스 내 일부 테이블만 백업
mysqldump -uadmin -psecret --databases myapp_db --tables users logs > partial_backup.sql

Docker 환경에서의 백업

컨테이너 내부의 MySQL 인스턴스에 접근하여 동일한 명령어를 실행할 수 있으며, 볼륨 마운트를 통해 백업 파일을 호스트 시스템에 직접 저장하는 것이 편리합니다.

# 컨테이너 내에서 mysqldump 실행 후 호스트로 출력
docker exec mysql_container sh -c 'exec mysqldump -uroot -pMyPass --databases app_db' > /backup/app_db_$(date +%F).sql

복원

일반 복원

백업 파일을 다시 MySQL 서버에 로드하여 복원합니다.

mysql -uadmin -psecret < /path/to/backup.sql

Docker 환경에서의 복원 절차

  1. 백업 파일을 컨테이너 내부로 복사하거나, 이미 마운트된 볼륨 경로에 위치시킵니다.
  2. 컨테이너 내부에서 MySQL 클라이언트를 사용해 복원 수행:
  3. docker exec -i mysql_container mysql -uadmin -psecret < /backup/backup.sql
      

태그: MySQL mysqldump docker 데이터베이스 백업 데이터베이스 복원

6월 11일 20:40에 게시됨