MySQL 데이터베이스 백업 및 복원하기
Backup and Restore Database with mysqldump
데이터는 기업의 핵심 자산이며, 그 가치는 데이터 관리와 보호의 중요성을 높입니다. 특히, 응용 프로그램의 핵심인 데이터베이스의 손상이나 유실은 시스템 동작을 중단시키며 사업에 심각한 영향을 미칠 수 있습니다.
이 때문에 데이터베이스의 백업과 복원은 매우 중요합니다. 기술적인 문제, 휴먼 에러, 사이버 공격 등 각종 위험 요인으로부터 데이터를 보호할 수 있는 가장 효과적인 방법 중 하나가 바로 주기적인 백업입니다. 이렇게 백업된 데이터를 통해 필요할 때 데이터베이스를 복원함으로써, 데이터 손상이나 시스템 장애로 인해 발생할 수 있는 잠재적인 비용을 크게 줄일 수 있습니다.
이번 포스팅에서는 MySQL 클라이언트에서 제공하는 유틸리티를 활용하여 데이터를 백업하고 복원하는 방법에 대해 알아보겠습니다.
MySQL Database Backup
MySQL 데이터베이스를 백업하는 가장 간편한 방법은 mysqldump
명령을 이용하는 것입니다. mysqldump
는 MySQL 서버의 데이터베이스 또는 테이블을 백업하거나 복사하는 CLI 유틸리티입니다. mysqldump
의 기본 구문은 아래와 같습니다:
$ mysqldump -u [username] -p[password] [database] > [snapshot.sql]
[username]
: 데이터베이스에 접속할 때 사용할 MySQL 계정 이름입니다.[password]
: 해당 계정의 패스워드입니다.-p
옵션과 패스워드 사이에 공백이 없어야 합니다.[database]
: 백업을 진행할 데이터베이스의 이름입니다.[snapshot.sql]
: 백업의 결과물이 저장될 파일의 이름입니다.
이를 활용하여 AWS RDS에서 운영 중인 MySQL 데이터베이스를 백업해 보겠습니다.
아래 명령어를 실행하여 macOS에 MySQL을 설치합니다. Homebrew가 설치되지 않은 경우에는 먼저 macOS에 Homebrew 설치하기를 참고하여 설치를 진행합니다.
$ brew install mysql
설치가 완료된 후, MySQL 클라이언트가 제대로 설치되었는지 아래 명령어로 확인합니다. 정상적으로 설치가 되었다면 MySQL 클라이언트의 설치 경로가 출력됩니다:
$ which mysql
/opt/homebrew/bin/mysql
$ which mysqldump
/opt/homebrew/bin/mysqldump
이를 활용하여 AWS RDS에 위치한 MySQL 데이터베이스의 백업을 시작해 보겠습니다. 다음은 몇 가지 옵션을 적용하여 백업 파일을 생성하는 명령어입니다:
$ mysqldump --set-gtid-purged=OFF --triggers --routines --events \ # options
-h [endpoint] -P [port] -u [username] -p[password] \ # connections
[database] > [backup_filepath] # database & file location
--set-gtid-purged=OFF
: GTID를 백업에 포함시키지 않도록 합니다. GTID는 각 트랜잭션에 고유하게 부여하는 식별자입니다.--triggers
: 트리거를 백업에 포함시킵니다.--routines
: 스토어드 프로시저와 함수를 백업에 포함시킵니다.--events
: 이벤트를 백업에 포함시킵니다.-h [endpoint]
: MySQL 서버의 호스트 주소입니다. AWS RDS MySQL 인스턴스의 Endpoint로 AWS 콘솔에서 확인할 수 있습니다.-P [port]
: MySQL 서버의 포트 번호. 일반적으로 3306입니다.-u [username]
: MySQL 사용자 이름입니다.-p[password]
: MySQL 사용자 비밀번호입니다.[database]
: 백업하려는 데이터베이스 스키마 이름입니다.>
: Unix나 Linux 시스템에서 데이터 스트림의 통로를 바꾸는 역할을 하는 리다이렉션 연산자입니다. 여기서는 생성된 백업 파일의 데이터가[backup_filepath]
파일로 이동됩니다.[backup_filepath]
: 로컬 머신에 백업 파일이 저장될 경로입니다.
다음은 각 요소를 적절히 포함하여 입력한 예제입니다:
$ mysqldump --set-gtid-purged=OFF --triggers --routines --events \
-h catsriding.rds.amazonaws.com -P 3306 -u admin -p1234 \
blog > /catsriding/backup.sql
백업 작업이 완료되면, [backup_filepath]
에 지정한 경로에 백업파일이 생성됩니다. mysqldump
명령은 MySQL 데이터베이스의 테이블 구조와 해당 테이블에 들어있는 모든 데이터를 아래와 같이 SQL 쿼리 형식으로 백업합니다:
-- MySQL dump 10.13 Distrib 8.3.0, for macos14.2 (arm64)
--
-- Host: catsriding.rds.amazonaws.com Database: blog
-- ------------------------------------------------------
-- Server version 8.0.35
CREATE TABLE `posts` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci NOT NULL,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `posts` VALUES (1, 'First blog title', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...', '2024-03-02 14:37:25'),
...
이 백업 파일은 필요에 따라 언제든지 데이터를 복원하는 데 활용될 수 있습니다.
MySQL Database Restore
백업 파일로부터 데이터베이스를 복원하는 것은 mysql
명령을 사용하여 수행할 수 있습니다. 기본 구문은 다음과 같습니다:
$ mysql -u [username] -p[password] [database_name] < [dump_file.sql]
매개변수는 앞서 백업 구문에서 사용된 것과 동일합니다.
- Database
- MySQL