MySQL로 dump 파일을 생성하고 복원하는 방법
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 MySQL로 dump 파일을 생성하고 복원하는 방법에 대해서 정리해 봤습니다.
시험해 본 환경은 RHEL9, MySQL8.0.36입니다. RHEL9에서 MySQL 설치 시 발생하는 문제는 아래 블로그를 참고해 주세요.
테스트용 데이터베이스 생성
먼저 MySQL에 접속하여 테스트용 데이터베이스와 테이블을 생성해야 합니다.
mysql> create database testdb;
mysql> use testdb;
testdb라는 이름의 테스트용 데이터베이스를 생성합니다.
mysql> CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
이어서 테이블을 생성합니다.
mysql> INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');
생성한 테이블에 Alice, Bob, Charlie라는 데이터를 삽입합니다.
mysql> select * from test_table;
+----+---------+
| id | name |
+----+---------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+----+---------+
3 rows in set (0.00 sec)
select * from으로 삽입한 데이터를 확인할 수 있습니다.
dump 파일 생성
이제 dump 파일을 보관할 디렉토리를 생성하고, dump 파일을 생성해 보도록 합시다.
mkdir -p /path/to/backup
path/to/backup 디렉토리를 생성합니다.
mysqldump -u root -p --all-databases > /path/to/backup/db_backup.sql <- 모든 데이터베이스를 백업
mysqldump -u root -p testdb > /path/to/backup/db_backup.sql <- 특정 데이터베이스만 백업
이제 mysqldump 명령어를 통해 dump 파일을 생성합니다. 모든 데이터베이스를 백업할 수도 있고, 특정 데이터베이스만 백업할 수도 있습니다. 둘 중 하나를 선택해서 명령어를 입력합니다.
ls /path/to/backup
db_backup.sql
ls를 입력해 보면, dump 파일이 생성된 것을 확인할 수 있습니다.
※ 사용중인 테이블, 데이터베이스의 사이즈가 크면 클수록 dump 파일의 생성에 시간이 걸립니다.
dump 파일을 이용하여 복원
이제 dump 파일을 이용하여 복원해 보도록 합시다. 먼저 복원에 앞서 기존에 생성한 테이블을 삭제합시다.
mysql> drop table test_table;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
Empty set (0.00 sec)
drop 명령어로 테이블을 삭제하고 제대로 삭제되었는지 확인합니다.
※ 복원에는 복원할 데이터베이스를 생성할 필요가 있지만, 이번에는 데이터베이스까지 삭제하지 않았기 때문에 이대로 진행합시다.
mysql -u root -p testdb < /path/to/backup/db_backup.sql
이제 testdb의 데이터베이스를 복원합니다.
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| test_table |
+------------------+
1 row in set (0.00 sec)
mysql> select * from test_table;
+----+---------+
| id | name |
+----+---------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+----+---------+
3 rows in set (0.00 sec)
마지막으로 show tables;와 select * from으로 결과 값을 확인해 보면, 정상적으로 복원된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.