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