메인 콘텐츠로 건너뛰기

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
MySQL 백업 전략은 두 부분으로 이루어집니다: 데이터의 일관된 스냅샷을 만드는 것(전체 백업)과 그 스냅샷 이후에 이루어진 변경 사항을 재생하는 방법을 갖추는 것(특정 시점 복구)입니다. 적합한 도구는 데이터베이스 크기, 허용 가능한 복구 시간, 그리고 감수할 수 있는 데이터 손실량에 따라 달라집니다.

mysqldump — 논리 백업

mysqldump는 데이터를 SQL 문으로 내보냅니다. 가장 이식성이 높은 형식이며 모든 크기의 데이터베이스에서 동작하지만, 큰 데이터 세트에서는 바이너리 백업보다 복원이 느립니다. 단일 데이터베이스 백업:
모든 데이터베이스 백업:
InnoDB에 권장되는 플래그:
--single-transaction 없이 실행하면 mysqldump는 LOCK TABLES로 테이블을 잠그며, 덤프가 진행되는 동안 쓰기가 차단됩니다. 덤프에서 복원:
모든 데이터베이스를 복원하려면: mysql -u root -p < all_databases.sql

바이너리 로그를 이용한 특정 시점 복구

전체 백업은 마지막 백업 시점까지만 보호합니다. 바이너리 로깅을 사용하면 백업 이후에 이루어진 모든 변경 사항을 재생할 수 있습니다. 요구 사항:
  • 바이너리 로깅 활성화(log_bin = ON)
  • 백업 시 --source-data=2 사용(시작 binlog 위치 기록)
워크플로:
  1. 전체 백업 복원:
  1. 덤프 파일에서 binlog 시작 위치 찾기:
  1. 되돌리려는 이벤트 직전 시점까지 바이너리 로그 재생:
mysqlbinlog 옵션의 자세한 내용은 MySQL 바이너리 로깅을 참조하세요.

MySQL Shell 덤프 유틸리티

MySQL Shell(mysqlsh)은 mysqldump보다 빠른 덤프 및 로드 유틸리티를 제공합니다. 병렬 스레드를 사용하고 압축된 출력을 생성하므로 큰 데이터베이스에 실용적입니다.
MySQL Shell 덤프 유틸리티는 기본적으로 출력을 압축하며(zstd), 덤프와 로드 모두 여러 CPU 코어에서 병렬화할 수 있습니다. 몇 GB보다 큰 데이터베이스에서는 mysqldump 대비 속도 차이가 상당합니다.

백업 방법 비교

mysqldump는 여전히 이식성과 단순함을 위한 기본 선택입니다. 큰 데이터베이스에서는 MySQL Shell 덤프가 사실상 mysqlpump를 대체했습니다 — 더 빠르고, 더 작은 파일을 생성하며, MySQL 8.0+를 지원합니다. mysqlpump는 MySQL 8.4에서 제거되었습니다 — 바이너리가 빌드에 전혀 포함되지 않으므로, 이를 호출하는 모든 스크립트는 바로 실패합니다. 복원 시간이 중요한 약 50GB 이상의 프로덕션 데이터베이스에서는 Percona XtraBackup 또는 MySQL Shell 덤프가 실용적인 선택입니다.

각 방법을 사용할 시기

백업 예약하기

야간 덤프를 실행하는 cron 작업이 가장 일반적인 프로덕션 설정입니다:
백업 사용자에게는 SELECT, LOCK TABLES, SHOW VIEW, TRIGGER, EVENT, RELOAD, PROCESS 권한만 필요합니다 — ALL PRIVILEGES는 필요하지 않습니다. PROCESS가 없어도 mysqldump는 완료되지만, 테이블스페이스 메타데이터를 덤프하려고 시도하면서 실행할 때마다 “Access denied … PROCESS privilege” 오류를 stderr에 출력합니다.

백업 검증하기

테스트하지 않은 백업은 백업이 아닙니다. 정기적으로 검증하세요:
최소 월 1회 자동화된 복원 테스트를 수행하면 손상, 권한 문제, 디스크 공간 문제를 실제로 문제가 되기 전에 발견할 수 있습니다.

자주 묻는 질문

--single-transaction은 모든 스토리지 엔진에서 동작하나요?

아니요. --single-transaction은 일관된 읽기 스냅샷을 사용하며, 이는 InnoDB만 지원합니다. 같은 데이터베이스의 MyISAM 테이블은 덤프 중에 여전히 LOCK TABLES로 잠깁니다. 엔진이 혼합되어 있다면 --single-transaction만으로는 완전히 일관된 덤프에 충분하지 않습니다.

백업을 얼마나 오래 보관해야 하나요?

최소한: 일일 백업 7–14일, 주간 백업 4주, 월간 백업 1년. 보관 기간은 규제 요구 사항과 얼마나 먼 과거로 복구해야 할 수 있는지에 따라 달라집니다. 바이너리 로그는 가장 오래된 보관 백업과 현재 사이의 간격을 메울 만큼 충분히 오래 보관해야 합니다.

데이터 디렉토리를 복사하는 것이 유효한 백업인가요?

서버를 먼저 종료한 경우에만 유효합니다(콜드 복사). 실행 중인 MySQL 서버는 직접 복사하기에 안전하지 않은 방식으로 데이터 파일을 기록하므로, 손상된 백업을 얻게 됩니다. 서버를 중지하지 않는 핫 백업에는 MySQL Shell의 덤프 유틸리티 또는 Percona XtraBackup을 사용하세요.

문제 해결

백업 스크립트는 VillageSQL로 전환해도 그대로 동작합니다. VillageSQL은 MySQL의 드롭인 대체품이므로, 이 가이드의 mysqldump 명령, 바이너리 로그 설정, 복원 런북이 그대로 동작합니다.

참고