소개
이 랩에서는 mysqldump 명령줄 도구를 사용하여 MySQL 데이터베이스를 백업하고 복원하는 방법을 배웁니다. mysqldump는 데이터 보호, 재해 복구 및 마이그레이션에 필수적인 논리적 백업을 만드는 데 중요한 유틸리티입니다.
전체 데이터베이스 백업, 단일 테이블 백업, 그리고 백업 파일에서 둘 다 복원하는 연습을 하게 됩니다. 이 랩에서는 데이터 손실 시나리오를 시뮬레이션하고 백업을 사용하여 데이터를 복구하는 과정을 안내하여 완전한 백업 및 복구 라이프사이클을 이해하도록 돕습니다.
전체 데이터베이스 백업
데이터 보호의 첫 번째 단계는 완전한 백업을 만드는 것입니다. 이 단계에서는 mysqldump를 사용하여 미리 구성된 mydatabase 데이터베이스의 전체 백업을 생성합니다.
먼저 터미널을 엽니다. 데이터베이스를 검사하여 무엇을 포함하고 있는지 살펴보겠습니다. root 사용자를 사용하여 MySQL 서버에 연결합니다.
sudo mysql -u root
mysql> 프롬프트가 보이면 mydatabase 데이터베이스로 전환하고 테이블을 확인합니다.
USE mydatabase;
SHOW TABLES;
products와 users라는 두 개의 테이블이 표시되어야 합니다.
+--------------------+
| Tables_in_mydatabase |
+--------------------+
| products |
| users |
+--------------------+
2 rows in set (0.00 sec)
이제 MySQL 셸을 종료하여 터미널로 돌아갑니다.
exit
전체 데이터베이스를 백업할 시간입니다. mysqldump 명령은 데이터베이스를 읽고 이를 다시 만드는 데 필요한 SQL 문을 출력합니다. 이 출력을 .sql 파일로 리디렉션합니다.
mydatabase를 백업하고 /home/labex/backup 디렉토리 안에 mydatabase_backup.sql이라는 파일로 저장하려면 다음 명령을 실행합니다.
sudo mysqldump -u root mydatabase > /home/labex/backup/mydatabase_backup.sql
백업 파일이 생성되었는지 확인하려면 /home/labex/backup 디렉토리의 내용을 나열합니다.
ls /home/labex/backup
백업 파일이 나열된 것을 볼 수 있습니다.
mydatabase_backup.sql
데이터베이스의 전체 백업을 성공적으로 생성했습니다.
단일 테이블 백업
때로는 전체 데이터베이스 대신 특정 테이블만 백업해야 할 수도 있습니다. 이는 더 작고 집중적인 작업에 유용합니다. 이 단계에서는 products 테이블만 백업합니다.
구문은 전체 데이터베이스 백업과 유사하지만, 데이터베이스 이름 뒤에 테이블 이름을 지정합니다.
터미널에서 다음 명령을 실행하여 mydatabase에서 products 테이블을 백업합니다. 백업은 products_backup.sql로 저장됩니다.
sudo mysqldump -u root mydatabase products > /home/labex/backup/products_backup.sql
새 백업 파일이 생성되었는지 확인해 보겠습니다. 백업 디렉토리의 내용을 다시 나열합니다.
ls /home/labex/backup
이제 전체 데이터베이스 백업과 단일 테이블 백업이 모두 표시되어야 합니다.
mydatabase_backup.sql products_backup.sql
단일 테이블 백업 파일의 내용을 검사하여 products 테이블에 대한 정보만 포함되어 있는지 확인할 수 있습니다.
cat /home/labex/backup/products_backup.sql
출력에는 products 테이블만 생성하고 채우는 SQL 문이 표시됩니다. 이를 통해 대상 백업을 성공적으로 생성했음을 확인할 수 있습니다.
전체 데이터베이스 복원
이제 백업이 있으므로 복원 연습을 해보겠습니다. 이 단계에서는 mydatabase 전체를 삭제하여 재해를 시뮬레이션한 다음 전체 백업 파일에서 복원합니다.
먼저 데이터베이스를 삭제합니다. -e 플래그를 사용하면 터미널에서 직접 단일 SQL 명령을 실행할 수 있습니다.
sudo mysql -u root -e "DROP DATABASE mydatabase;"
데이터베이스가 삭제되었는지 확인합니다.
sudo mysql -u root -e "SHOW DATABASES;"
mydatabase가 목록에 더 이상 없는 것을 볼 수 있습니다.
데이터를 복원하기 전에 동일한 이름으로 빈 데이터베이스를 생성해야 합니다.
sudo mysql -u root -e "CREATE DATABASE mydatabase;"
이제 mydatabase_backup.sql 파일을 mysql 클라이언트에 입력으로 리디렉션하여 데이터베이스를 복원합니다.
sudo mysql -u root mydatabase < /home/labex/backup/mydatabase_backup.sql
이 명령은 백업 파일의 모든 SQL 문을 실행하여 테이블을 다시 생성하고 데이터를 삽입합니다.
복원을 확인하려면 MySQL 에 연결하여 테이블과 해당 내용을 확인합니다.
sudo mysql -u root
mysql> 프롬프트에서 다음 명령을 실행합니다.
USE mydatabase;
SHOW TABLES;
SELECT * FROM users;
products와 users 테이블이 다시 표시되어야 하며, users 테이블에는 원래 데이터가 포함되어 있어야 합니다.
+--------------------+
| Tables_in_mydatabase |
+--------------------+
| products |
| users |
+--------------------+
2 rows in set (0.00 sec)
+----+------------+--------------------------+
| id | name | email |
+----+------------+--------------------------+
| 1 | John Doe | john.doe@example.com |
| 2 | Jane Smith | jane.smith@example.com |
+----+------------+--------------------------+
2 rows in set (0.00 sec)
MySQL 셸을 종료합니다.
exit
치명적인 오류로부터 전체 데이터베이스를 성공적으로 복구했습니다.
요약
이 실습에서는 mysqldump 유틸리티를 사용하여 MySQL 데이터베이스를 백업하고 복원하는 필수 기술을 배웠습니다. 데이터베이스 전체 백업과 단일 테이블에 대한 대상 백업을 만드는 연습을 했습니다.
또한 전체 데이터베이스 손실과 단일 테이블의 우발적 삭제를 시뮬레이션하여 복구 절차에 대한 실습 경험을 쌓았습니다. 두 시나리오 모두에서 데이터를 성공적으로 복원함으로써 데이터베이스 관리자 또는 개발자에게 중요한 기술인 완전한 데이터 보호 라이프사이클에 대한 기본적인 이해를 보여주었습니다.



