최근 개발 서버 테스트 중 DB 데이터가 손실되는 문제가 발생했습니다.
데이터의 중요성은 알고 있었지만 직접적인 담당 범위가 아니라고 생각했기 때문에 백업에 대해서는 신경을 쓴 적이 없는데요.
이번 기회를 통해 MySQL, MariaDB에서 데이터베이스 백업 및 복구하는 방법과 자동 백업을 설정하는 방법에 대해 살펴보면서 정리한 내용입니다.
(해당 포스팅은 mysqldump를 사용한 DB 백업 및 복구 방법에 대한 포스팅이며, 자동 백업에 대한 포스팅은 따로 작성하여 하단에 링크로 추가할 예정입니다.)
mysqldump
백업에서 사용되는 mysqldump는 MySQL에서 제공하는 대표적인 덤프 프로그램이며, 논리적 덤프를 수행할 수 있는 도구인데요.
데이터베이스 전체의 덤프부터, 각 데이터베이스 단위의 덤프, 테이블 단위의 덤프를 모두 지원하며 사용법도 쉽고 지원되는 옵션도 많습니다. (csv, delimeted, json 데이터 형식도 지원)
mysqldump는 덤프뿐만 아니라, 데이터의 이관이나 복제 등과 같이 어떤 MySQL 서버에서 다른 서버로 데이터를 옮기는 경우에도 사용됩니다.
1. 전체 데이터베이스 백업 및 복구
해당 DB가 가지고 있는 모든 데이터베이스를 백업하는 형태이며, 해당 DB의 용량이 큰 경우 작업 시간이 길어질 수 있습니다.
//백업
mysqldump -u [아이디] -p --all-databases > [백업할 파일명].sql
[패스워드]
//복구
mysql -u [아이디] -p < [백업된 파일명].sql
[패스워드]
2. 하나의 데이터베이스 백업 및 복구
대상 데이터베이스 내 모든 테이블의 정보가 필요할 때 사용되는 방식입니다. --no-data 옵션을 사용하여 데이터 없이 테이블 구조만 백업할 수도 있습니다.
//백업
mysqldump -u [아이디] -p [데이터베이스명] > [백업할 파일명].sql
[패스워드]
//데이터 없이 테이블 구조만 백업
mysqldump -u [아이디] -p --no-data [데이터베이스명] > [백업할 파일명].sql
[패스워드]
//복구
mysql -u [아이디] -p [데이터베이스명]< [백업된 파일명].sql
[패스워드]
3. 특정한 테이블만 백업 및 복구
데이터베이스 내 특정 테이블만 백업하는 방식입니다.
//백업
mysqldump -u [아이디] -p [데이터베이스명] [테이블명] > [백업할 파일명].sql
[패스워드]
//복구
mysql -u [아이디] -p [데이터베이스명] < [백업된 파일명].sql
[패스워드]
백업 및 복구 명령어에서는 부등호 방향에 주의할 필요가 있는데요.
백업을 할 때는 [ > ] 오른쪽 부등호 모양이 사용되고, 복구를 할 때는 [ < ] 왼쪽 부등호 모양이 사용됩니다.
또한 하나의 데이터베이스 복원이나 특정 테이블을 복원할 때, 대상이 되는 데이터베이스가 삭제된 경우 '해당 데이터베이스를 찾을 수 없다'는 오류가 발생하기 때문에 데이터베이스 생성은 기본적으로 되어있어야 합니다.
***
추가로 mysqldump에는 위 예시에 나온 '--all-databases', '--no-data', '--routines' 옵션 외에도 사용할 수 있는 다양한 옵션들이 있으며, 옵션과 관련된 더 자세한 내용은 아래 mysql 문서를 참고하시면 좋을 것 같습니다.
https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
< 참고 자료 >
'Programming > MySQL' 카테고리의 다른 글
MySQL JSON 데이터 타입에 활용되는 함수 정리 (0) | 2022.10.29 |
---|---|
MySQL 계정 생성 및 권한 부여 방법 정리 (0) | 2022.10.27 |
MySQL 프로시저 기본적인 사용법, insert 더미데이터 넣기 (0) | 2022.02.17 |
MySQL 한글 물음표, 한글 깨짐 해결 방법 (mysql 5.6) (0) | 2021.07.31 |
MySQL 비밀번호 변경 방법, How to change MySQL root password (0) | 2021.07.24 |