본문 바로가기

DB/Mysql(MariaDB)

MariaDB - mysqldump 시 함수와 프로시저 누락 문제 해결 방법

728x90

데이터베이스 운영 시 주기적인 백업은 필수적입니다. 저 역시 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

이 명령어로 모든 데이터베이스가 백업된다고 생각했기 때문에, 모든 데이터베이스 객체들이 포함될 것이라 믿었습니다. 하지만 새로 생성된 데이터베이스에 FunctionProcedure가 추가되었고 이 파일로 복원하던 중 문제가 발생했습니다.

 

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 옵션을 추가하여 완전한 백업을 하는 것이 좋습니다.

모든 데이터베이스의 테이블, 뷰, 함수, 프로시저, 그리고 트리거까지 모두 포함된 백업 파일을 생성할 수 있습니다:

728x90
반응형