[Synology, Docker] mariadb 백업하기(네이티브, 도커)

시놀로지에서 mariadb를 작업 스케줄러를 이용해 매일 백업하는 방법입니다. 시놀로지 네이티브인 경우와 도커에 올린 경우 모두 간단하게 작업 스케줄러에 스크립트를 등록해 자동 백업을 하고, 일정 기간이 경과하면 파일을 삭제할 수 있습니다.

mariadb를 패키지로 설치한 경우

mariadb의 백업은 아래 명령으로 처리합니다.

mysqldump -u root -p'rootpassword' -A > ${BKPATH}/$(date '+%y%m%d_%H%M%S').sql

제 경우, root 패스워드에 특수문자가 있다보니 -prootpassword 로는 제대로 실행이 되지 않아서 작은 따옴표로 묶어줬습니다.

이걸 작업스크립트(crontab)에 등록하고 root권한으로 실행을 시키고, 이왕 하는거 오래된 파일(예시에서는 14일)을 자동 삭제하는 스크립트를 넣어줍니다.

#!/bin/bash
BKPATH=[백업을 원하는 경로]
#DB 백업
mysqldump -u root -p'rootpassword' -A > ${BKPATH}/$(date '+%y%m%d_%H%M%S').sql
#14일이 지난 파일 삭제
find "${BKPATH}" -name '*.sql' -mtime +14 -exec rm -f {} ;

이렇게 자정마다 실행시키면, 매일 자정마다 지정한 폴더에 날짜_시간.sql 파일이 생성됩니다.

시놀로지에서는 mariadb를 패키지로 제공하지만, 버전업이 상대적으로 느린 단점이 있습니다.
그래서 docker를 이용해서 mariadb를 이용하시는 경우도 있을겁니다. 제가 그렇게 이용하고 있어요.

docker로 mariadb를 사용하는 경우

docker의 경우 스크립트가 조금 변경됩니다.
docker exec 로 명령을 보내줍니다.

docker exec mariadb_container_name /usr/bin/mysqldump -u root -p'rootpassword' -A > ${BKPATH}/$(date '+%y%m%d_%H%M%S').sql

exec 다음에 mariadb의 컨테이너 이름이나 ID를 입력하고, 명령을 날려줍니다. 이렇게 하면 위에 네이티브로 설치된 백업과 동일한 동작을 수행합니다. 작업 스크립트에 동일하게 넣으려면

#!/bin/bash
BKPATH=[백업을 원하는 경로]

docker exec mariadb /usr/bin/mysqldump -u root -p'rootpassword' -A > ${BKPATH}/$(date '+%y%m%d_%H%M%S').sql

find "${BKPATH}" -name '*.sql' -mtime +14 -exec rm -f {} ;

이 내용을 작업 스크립트에 넣고 root 권한으로 실행시켜주면 되며, 14일이 지난 후 자동으로 파일을 삭제해줍니다.

처리 결과를 보고싶다면 실행 상세 정보를 이메일로 보내기에 체크를 합니다.

작업 스크립트는 이렇게 넣어주면 됩니다.
{{#is "post"}} {{/is}}