- 2025-02-12 변경내용 : TrueNAS Cloud Sync 내용 추가
개요
오라클 클라우드와 Supabase를 이용하여 Teldrive를 구축하고 잘 사용하던 중, DB에 문제가 생기면 올려놓은 파일에 접근하기 힘들겠다는 생각이 들었습니다. 그래서 DB백업하는 방법을 간단하게 적어놓고자 합니다.
윈도우에서 백업하기
DBeaver라는 프로그램을 사용합니다. 아래처럼 PostgreSQL을 선택한 뒤, Supabase에서 Host, User, Database명등을 가져와 기입하면 됩니다.
접속에 필요한 Host, Database, Username, Password 4가지의 정보는 아래에서 얻을 수 있습니다.
DBeaver에서 Database를 우클릭한 후 글로벌 백업을 클릭해서 진행하면 무난하게 백업파일을 내려받을 수 있습니다.
리눅스에서 백업하기
기왕이면 Teldrive가 작동되고 있는 리눅스에서, 스크립트로 만들어서 매일 자동으로 백업하도록 만드는 것이 조금 더 편할 겁니다.
Supabase를 백업하려면 리눅스에서 pg_dump명령어를 사용해야 하고 이를 위해선 PostgreSQL 클라이언트와 서버의 버전이 일치해야 합니다.
먼저 Supabase에서 사용중인 DB버전을 보기 위해서 아래 명령을 통해 postgresql client를 설치합니다.
sudo apt-get update
sudo apt-get install postgresql-client-common
설치가 완료되면, Supabase에서 PSQL 명령어를 복사해서 쉘에 입력합니다.
psql -h aws-0-ap-northeast-2.pooler.supabase.com -p 6543 -d postgres -U postgres.
Password for user postgres. :
psql (15.8 (Ubuntu 15.8-1.pgdg22.04+1), server 15.6)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
그러면 출력되는 문구를 통해 15.6버전을 사용중인 것을 확인할 수 있습니다.
select version(); 을 입력해서 확인할 수도 있습니다.
postgres=> select version();
version
------------------------------------------------------------------------------------
PostgreSQL 15.6 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 13.2.0, 64-bit
(1 row)
\q 를 입력해 빠져나와 줍니다.
Ubuntu를 기준으로 최신 버전의 pg_dump를 설치하려면 패키지 저장소를 추가해야 하기 때문에 아래 명령어를 붙여넣어 줍니다.
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-client-15
pg_dump는 아래 명령어와 같은 형식으로 사용합니다.
pg_dump -U $USER -h $HOST -p $PORT -d $DB -F p -b -v -f $backup_file
이것만 사용해도, 당장 백업은 할 수 있지만 매번 비밀번호를 입력해야 하고, 자동백업이 최종 목적이기 때문에 아래와 같은 스크립트를 작성해 주었습니다.
이 스크립트는 고스트 도커 구축 후 백업을 위해 사용하던 스크립트를 이용했습니다.
2025.01.22 - [Apps] - 오라클 클라우드에 도커로 워드프레스 구축하고 백업하기
오라클 클라우드에 도커로 워드프레스 구축하고 백업하기
개요1년도 더 전에 오라클 프리티어 A1을 만들어두고 구글 드라이브 무제한과 연동한 노하드 Plex 라이브러리를 구축하려 했으나, 구글의 통수를 씨게 얻어맞은 후로, 오라클 프리티어를 마땅히
worklazy.net
변수쪽에 필요한 값을 supabase에서 참조해 직접 기입하시면 됩니다.
export PGPASSWORD는 패스워드를 미리 넘겨주어 패스워드 입력과정을 생략하도록 해 줍니다. 그 외에도 홈 디렉토리에 .pgpass 파일을 만드는 방법도 있지만, 파일 하나로 관리하기 위해 아래처럼 작성했습니다.
또한, '--inserts' 옵션을 넣어 호환성을 증대 시키고 no-owner, no-acl로 버전 호환을 위한 파일 총 2개를 만들도록 작성했습니다.
#!/bin/bash
#변수 지정
USER=''
HOST=''
PORT='6543'
DB='postgres'
export PGPASSWORD=''
# 백업 디렉토리 설정
backup_dir="/data/telbackup"
# 백업 파일 이름 생성
backup_file="teldrive_$(date +%Y%m%d_%H%M%S).sql"
backup_file_noacl="teldrive_$(date +%Y%m%d_%H%M%S)_noowner_noacl.sql"
# 백업함수
backup_teldrive() {
echo "Job start!"
pg_dump -U $USER -h $HOST -p $PORT -d $DB -F p --inserts -b -v -f $backup_dir/$backup_file
}
backup_teldrive_noacl() {
echo "Job_noacl start!"
pg_dump -U $USER -h $HOST -p $PORT -d $DB -F p --no-owner --no-acl --inserts -b -v -f $backup_dir/$backup_file_noacl
}
# 기간 경과 파일삭제 함수
backup_del_period() {
echo "Removing backup files > 3 days"
sudo find "$backup_dir" -name "teldrive_*" -mtime +3 -exec rm {} \;
}
# 함수 호출
run_backup() {
backup_teldrive
backup_teldrive_noacl
backup_del_period
}
run_backup
이렇게 만들어진 파일을 구글 드라이브에 연동하기 위해 Rclone으로 연동한 구글 드라이브(backup_server_host)를 추가해서 작성했습니다. 개인 환경에 맞게 수정해 주세요.
#!/bin/bash
#변수 지정
USER=''
HOST=''
PORT='6543'
DB='postgres'
export PGPASSWORD=''
# 백업 디렉토리 설정
backup_dir="/data/telbackup"
# 백업 파일 이름 생성
backup_file="teldrive_$(date +%Y%m%d_%H%M%S).sql"
backup_file_noacl="teldrive_$(date +%Y%m%d_%H%M%S)_noowner_noacl.sql"
# 백업 파일을 저장할 서버 정보
backup_server_host="supabase:"
# 백업함수
backup_teldrive() {
echo "Job start!"
pg_dump -U $USER -h $HOST -p $PORT -d $DB -F p --inserts -b -v -f $backup_dir/$backup_file
}
backup_teldrive_noacl() {
echo "Job_noacl start!"
pg_dump -U $USER -h $HOST -p $PORT -d $DB -F p --no-owner --no-acl --inserts -b -v -f $backup_dir/$backup_file_noacl
}
# 기간 경과 파일삭제 함수
backup_del_period() {
echo "Removing backup files > 3 days"
sudo find "$backup_dir" -name "teldrive_*" -mtime +3 -exec rm {} \;
}
# 구글 드라이브 싱크함수
backup_web_sync() {
echo "Syncing Google drive"
rclone sync "$backup_dir" "$backup_server_host" --metadata --verbose
rclone cleanup "$backup_server_host" --metadata --verbose
}
# 함수 호출
run_backup() {
backup_teldrive
backup_teldrive_noacl
backup_del_period
backup_web_sync
}
run_backup
이제 이 파일에 쓰기 권한을 주고
chmod +x ./telbackup.sh
crontab에 등록해 주면 됩니다.
crontab -e
0 0 * * * /home/ubuntu/script/telbackup.sh >> /home/ubuntu/script/telbackup.sh.log 2>&1
저는 이렇게 백업된 파일을 TrueNAS의 Cloud Sync기능을 이용해 로컬에다가도 같이 저장하고 있습니다.
로컬은 용량이 충분하므로 Sync가 아닌 Copy로 세팅해 올라왔던 모든 파일을 내려받고 있습니다.
고스트 파일 등으로 인해 구버전이 필요할 수도 있기 때문이며, 추후 시간이 너무 지나 필요없는 파일은 수동으로 지우면 되니까요.
관련 글
2025.02.12 - [Apps] - Teldrive 복원 및 이전하기
Teldrive 복원 및 이전하기
개요한 달 전 사용하던 오라클 클라우드로부터 벤 당했습니다. 증상은 제가 운영하던 블로그 및 기타 서비스로 접속을 할 수 없었고, 오라클 클라우드 로그인 시도 시, 아무리 비밀번호를 수정
worklazy.net
2025.01.23 - [Apps] - 오라클 클라우드와 Teldrive로 서버 없이 무제한 클라우드 사용하기
오라클 클라우드와 Teldrive로 서버 없이 무제한 클라우드 사용하기
2024-09-02 변경 내용 : teldrive 도커 허브 레지스트리 변경 반영(divyam234/teldrive → tgdrive/teldrive)2025-02-12 변경 내용 : session.db → storage.db 변경 반영개요구드 무제한이 사라지고 Dropbox에서 팀을 꾸려 사
worklazy.net
출처
DBeaver Community | Free Universal Database Tool
DBeaver Universal Database Tool DBeaver Community is a free cross-platform database tool for developers, database administrators, analysts, and everyone working with data. It supports all popular SQL databases like MySQL, MariaDB, PostgreSQL, SQLite, Apach
dbeaver.io