데이터베이스 운영 시 주기적인 백업은 필수적입니다. 저 역시 mysqldump 명령어로 데이터베이스 전체를 백업해 왔습니다.
백업 시 --all-databases 옵션을 사용하여 모든 데이터베이스를 백업하기 때문에 모든 객체가 백업될 것이라고 생각했습니다.
그러나 최근 새로 추가된 데이터베이스에서 함수와 프로시저를 백업하는 과정에서 예상치 못한 문제가 발생했습니다.
1. 백업 작업 중 발생한 문제
저는 항상 다음과 같은 형식으로 전체 데이터베이스를 백업하고 있었습니다.
mysqldump -uroot -p[password] --all-databases > DBBACKUP.sql
mysqldump -uroot -p[password] --all-databases --master-data=2 --single-transaction > DBBACKUP.sql
이 명령어로 모든 데이터베이스가 백업된다고 생각했기 때문에, 모든 데이터베이스 객체들이 포함될 것이라 믿었습니다. 하지만 새로 생성된 데이터베이스에 Function과 Procedure가 추가되었고 이 파일로 복원하던 중 문제가 발생했습니다.
2. 복원 작업에서 발견된 문제
전체 데이터베이스를 복원하는 과정에서 Function과 Procedure가 복원되지 않는 것을 발견했습니다.
백업본 자체를 여러 번 검토한 결과, 테이블과 뷰는 잘 백업되었지만 함수와 프로시저는 누락된 상태였습니다.
3. 원인 파악 및 해결 방법
mysqldump 명령어의 기본 동작이 함수와 프로시저는 백업하지 않는다는 것을 알게 되었습니다.
이는 mysqldump의 두 가지 옵션 설정 때문입니다
- --routines 옵션은 기본값이 FALSE입니다. 따라서 이 옵션을 추가하지 않으면 함수와 프로시저는 백업되지 않습니다.
- --triggers 옵션은 기본값이 TRUE라 트리거는 기본적으로 백업에 포함됩니다.
함수와 프로시저를 백업하려면 반드시 --routines 옵션을 명시적으로 추가해야 합니다.
mysqldump -uroot -p[password] --all-databases --routines > DBBACKUP.sql
mysqldump -uroot -p[password] --all-databases --master-data=2 --single-transaction --routines > DBBACKUP.sql
4. 다른 데이터베이스에 함수나 프로시저가 없어도 괜찮은가?
--routines 옵션을 항상 추가하는 것이 좋은가에 대한 의문이 생길 수 있습니다. 결론부터 말하자면, 다른 데이터베이스에 함수나 프로시저가 없어도 이 옵션을 추가하는 것은 전혀 문제가 되지 않습니다. mysqldump는 백업 시 함수와 프로시저가 있는 경우에만 이 객체들을 백업하며 없다면 자동으로 무시합니다.
5. 결론
데이터베이스 백업 시 함수와 프로시저가 있다면 --routines 옵션을 추가하여 완전한 백업을 하는 것이 좋습니다.
모든 데이터베이스의 테이블, 뷰, 함수, 프로시저, 그리고 트리거까지 모두 포함된 백업 파일을 생성할 수 있습니다:
'DB > Mysql(MariaDB)' 카테고리의 다른 글
MariaDB - 10.3 → 10.6 업그레이드 mysql.user 접근 오류와 해결 방법 (0) | 2024.11.24 |
---|---|
MariaDB - General Log 하루치씩 남기는 방법 (2) | 2024.10.23 |
MariaDB - Replication 복구 (Error 1062 해결 및 Slave 상태 점검) (2) | 2024.10.16 |
MariaDB - 무중단 Replication 설정 : DB인스턴스 추가 및 변경 (2) | 2024.09.27 |
MariaDB - Replication 설정 (Master-Master / Master-Slave) (0) | 2024.07.19 |