지난 포스팅에서 linux 환경에서 Tableau Server 설치를 진행했다. 이번 포스팅에서는 마찬가지로 linux 환경에서 crontab을 이용하여 데이터를 주기적으로 백업하는 과정을 정리해보자.
서버 환경이나 설정에 따라 백업 방법이 달라질 수 있기 때문에 먼저 살펴봐야할 점들이 있다.
Tableau server에서 tsm 명령어를 이용해 백업할 수 있는 데이터는 2가지이다. 첫번째는 데이터, 흐름, 통합 문서, 사용자 데이터, 사이트 구성 데이터 등 Tableau Server로 관리되는 데이터이고(tsm maintenance backup
명령어로 tsbak
파일 생성) 두번째는 서버 구성 및 Tableau Server 프로세스 구성 데이터이다.(tsm settings export
명령어로 json
파일 생성)
아래 코드로 백업이 가능하다.
tsm maintenance backup -f <filename>.tsbak -d
tsm settings export -f <filename>.json
tsbak
파일은 파일 경로가 지정되지 않으면 자동으로 /var/opt/tableau/tableau_server/data/tabsvc/files/backups/
경로에 저장된다.
linux에서 기본적으로 제공하는 crontab 스케줄러를 이용하여 백업 명령을 시켜보자. 백업 명령을 .sh
파일로 만들어 crontab이 해당 bash 파일을 주기적으로 실행시키도록 한다.
backup.sh
파일을 만들어 아래 코드를 넣고 저장했다. terminal에서는 경로 상관없이 tsm
명령어가 사용되지만 crontab으로 실행하게 되면 경로를 찾지 못해 tsm
경로를 언급해주어야 한다. 백업 파일은 2개 모두/var/opt/tableau/tableau_server/data/tabsvc/files/backups/
폴더에 저장하도록 설정했다. 그리고 백업 날짜가 자동으로 파일명에 추가되는 tsbak 파일과는 달리 topology 데이터를 저장하는 json 파일에는 백업 날짜가 추가되지 않기 때문에 백업 날짜를 추가해주었다. (비교적 topology 데이터는 변동이 적어서 자주 백업할 필요가 없어서인 듯 하다.)
/opt/tableau/tableau_server/packages/customer-bin.20222.22.0712.0324/tsm settings export -f /var/opt/tableau/tableau_server/data/tabsvc/files/backups/backup_topology_$(date '+%y-%m-%d').json
/opt/tableau/tableau_server/packages/customer-bin.20221.22.0712.0324/tsm maintenance backup -f backup_repository.tsbak -d
추가로 필자는 백업을 하루에 한번 실행할 계획인데 백업 파일도 그 크기가 작지 않으므로 7일이 지나면(7개 까지만 저장) 삭제되도록 설정하기 위해 다음 코드를 추가하였다.
find /var/opt/tableau/tableau_server/data/tabsvc/files/backups/*.json -mtime +6 -delete
find /var/opt/tableau/tableau_server/data/tabsvc/files/backups/*.tsbak -mtime +6 -delete
1) 사용자가 root가 아닌 사용자일 경우
기본 사용자 root가 아닌 다른 사용자를 사용할 경우 crontab 사용에서 오류가 날 수 있다. root 사용자로 crontab을 이용한다면 이 과정은 생략해도 된다. terminal에서 다음 코드를 입력하자.
cd /etc/cron.d
sudo touch cron.allow
sudo vim cron.allow
i
를 눌러 insert 모드로 들어간 뒤, crontab을 사용할 사용자 리스트를 적는다. 내가 사용한 계정은 user1
이다.
root
user1
esc
를 눌러 insert 모드를 종료시키고 :wq
로 종료하면 user1 계정에서도 crontab을 사용할 수 있다.
2) 로그 기록하기
crontab으로 명령어를 실행하면 terminal에서 실행하는 것처럼 바로 로그를 볼 수는 없다. 그래서 로그를 남기는 옵션을 3)에서 설정할 것이다. 로그 파일을 남기지 않을 거라면 이 과정은 생략해도 된다. 로그 파일을 쓰기 위해 backup.sh
파일 권한을 수정하자. 필자의 backup.sh
파일은 Desktop
폴더에 위치한다.
ls -l /home/user1/Desktop/backup.sh
위 코드를 실행하면 Desktop 폴더에 위치한 파일과 그 앞에 파일 권한이 표기되는데 backup.sh
파일의 권한이 -rw-rw-r--
로 나타난다면 권한을 수정해주어야 한다. 수정하지 않고 로그를 기록하려고 할 경우 Permission Denied
error가 발생하므로 다음 코드를 실행시키자.
sudo chmod +x /home/user1/Desktop/backup.sh
다시 bash.sh 파일 권한을 확인해보면 -rwxrwxr-x
으로 나타나면 성공이다.
ls -l /home/user1/Desktop/backup.sh
3) crontab 설정하기
드디어 crontab을 입력하여 bash.sh
에 담긴 코드를 주기적으로 실행시켜보자. terminal에 다음 코드를 실행시켜 crontab 편집 모드에 들어간다.
crontab -e
주석 맨 밑에 다음 코드를 입력한다. 형식은 '(실행 시간 및 주기) (명령어)'이다. 다음 코드는 매일 새벽 4시에 backup.sh
파일을 실행한다. crontab이 실행되는 시간을 변경하고 싶다면 친절하게 잘 설명된 글이 많으니 구글링 해보길 바란다.
00 04 * * * /home/user1/Desktop/backup.sh
필자처럼 crontab 실행동안 생성되는 로그를 기록하고 싶다면 다음 코드를 입력하자. Desktop 경로에 backup_날짜.log
파일명으로 로그가 저장된다.
00 04 * * * /home/user1/Desktop/backup.sh > /home/user1/Desktop/backup_$(date '+\%y\%m\%d').log 2>&1
이렇게 설정하면 자동으로 매일 새벽 4시에 백업이 되는 것을 확인할 수 있다. 로그로 확인하면 더 편리하다. 환경이 허락한다면 백업한 파일로 복원 과정도 테스트해보길 바란다.