본문 바로가기

개발관련

우분투 16.04 + docker DB백업 & 파일 백업 스케줄링 설정

우분투 16.04에 도커가 올라가 있고, 도커가 외부 링크로 파일을 저장하고 있는 서비스의 백업 스케줄링 설정에 대해서 알아보겠다.

서버에는 크론탭이 깔려 있어야 한다.




서버 : 우분투 16.04

디비 : 마리아 디비

서비스. : 도커

파일 폴더 : /data/





1. 루트에 백업 폴더를 생성한다.


$ mkdir backup





2. 백업 폴더로 이동 후 스케줄링에서 사용될 sh 파일을 생성한다.


$ vi backup.sh



파일의 내용은 아래와 같다.





#!/bin/sh

TODAY=`/bin/date +%Y%m%d`

docker exec [docker db name] /usr/bin/mysqldump -u root --password=[PW] [db name] > /root/backup/$TODAY-db.sql

zip /root/backup/$TODAY-db.sql.zip /root/backup/$TODAY-db.sql

rm -rf /root/backup/$TODAY-db.sql


zip -r $TODAY-file.zip /root/data/*








첫줄 : TODAY=`/bin/date +%Y%m%d`

   오늘 날짜를 TODAY 변수에 저장한다.



둘째줄 : docker exec [docker db name] /usr/bin/mysqldump -u root --password=[PW] [db name]] > /root/backup/$TODAY-db.sql

   디비를 백업한다. [docker db name]은 디비 도커를 생성할때 사용된 이름이다. [db name]은 해당 디비의 이름이다. ex) apple_production



셋째줄 : zip /root/backup/$TODAY-db.sql.zip /root/backup/$TODAY-db.sql

   위에서 생성된 디비 백업 파일을 압축 파일로 만든다


넷째줄 : rm -rf /root/backup/$TODAY-db.sql

   압축 파일을 만들고 디비 백업 파일을 삭제한다.



다섯째줄 : zip -r $TODAY-file.zip /root/data/*

   data 폴더를 압축한다.





3. 해당 sh파일의 권한을 수정한다.

$ chmod 100 backup.sh



왜했는지 까먹었다. 안해도 되면 안해도 상관 없다.










4. 크론탭을 설정한다.


$ crontab -e



해당 명령어를 입력하면 크론탭 설정 화면이 나온다. 아래의 내용을 입력 한다.





0 23 * * * /root/backup/backup.sh




앞에 시간은 서버 시간이다. 모르겠으면 해당 블로그를 참조하라


https://jdm.kr/blog/2









5. 로컬 - 서버 백업 파일 가져오는 스크립트




#!/bin/sh


echo "날짜를 입력하세요 YYYYMMDD: \c "

read  word

echo "입력한 날짜는: $word"


echo "$word-db.sql.zip 다운로드 시작......"

scp root@192.168.0.1:/root/backup/$word-db.sql.zip [저장 폴더 경로]




요레하면 날짜를 입력해서 파일을 가져올 수 있다








6. 기타 커맨드 모음


특정 폴더에 압축 풀기


$ unzip [file name ex) data.zip] -d [압축풀 경로 ex) /root/data/]


 




서버로 파일 가져오기 & 보내기


scp [계정@서버주소:원본경로] [목적파일명]

scp root@192.168.0.1:/root data.zip


보낼때는 반대로 하면 됨




도커 디비 복구하기


$ cat backup.sql | docker exec -i [docker db name] /usr/bin/mysql -u root --password=[password] [db name]