Linux 서버(Ubuntu Server)에 파일을 옮기거나 할 때 FTP를 사용해도 되지만
FTP 설치 등의 귀차니즘이 발동한다면......
Linux 서버의 IP : 192.168.15.25 라 하고...
(hahaite 는 제 계정입니다. 예시로 그냥 적음. ㅋ)
♣ SFTP 접속 후, 업로드하기
$ sftp hahaite@192.168.15.25
password : (패스워드 입력)
SFTP > put test.tar
SFTP > quit
♣ SFTP 접속하면서 업로드하기
$ sftp hahaite@192.168.15.25 <<< $'put test.tar'
♣ SSH Private Key 를 사용하여 접속하기
(ssh key 사용법은 본 글에서는 다루지 않는다.)
-I 옵션 뒤에 SSH Private Key 위치를 적어주면 password 없이 접속이 된다.
$ sftp -i ~/.ssh/hahaite 192.168.15.25 (hahaite 는 제 SSH Private Key 임)
만약 private Key 가 ~/.ssh/id_rsa 로 되어 있으면 따로 안적어도 된다.
$ sftp 192.168.15.25
(접속 끝)
♣ Batch File 을 이용한 업로드
SFTP 접속 시, Batch File 을 적어주면 접속 후, Batch File 안의 SFTP 명령어를 수행한다.
ex) mysftp.sh 란 파일을 만들고 아래 내용을 추가한다.
cd backup
put test.tar
그리고 -b 옵션에 위 파일을 기재해 준다.
$ sftp -b ./mysftp.sh 192.168.15.25
♣ SFTP 자동 업로드 구성
매일 새벽 1시에 자동으로 DB 가 백업되고,
이 백업 파일을 다른 서버에 SFTP 로 옮긴다고 가정해 보자.
매일 새벽 1시가 되면 backup.sh 란 쉘스크립트가 자동 실행된다.
DB Backup 시, 날짜 + 시간이 기록되도록 한다.
(Root2020 은 root 계정의 MariaDB의 비밀번호임)
OPTIONS="-u root -pRoot2020 --routines --extended-insert --quick --single-transaction"
BACKUP_DIR=/home/hahaite/MDB_Backup
♣ SFTP를 이용한 Database Backup 수행
mysqldump $OPTIONS $DB_NAME > $BACKUP_DIR/DB_$(date "+%Y-%m-%d_%H").sql
# SFTP 에 사용할 Batch File 을 생성한다.
# 이 때, 위에서 언급한 SSH Key 를 사용해 자동 로그인되도록 한다. password 를 물으면 안되니까...
# 첫줄은 > 가 한개, 둘째줄은 > 가 두개 ( >> ) 임을 주의한다.
echo "cd dbTest" > mysftp.sh
echo "put ${DB_NAME}_$(date "+%Y-%m-%d_%H").sql" >> mysftp.sh
cat ./mysftp.sh
batch File 을 사용하여 업로드한다.
sftp -b ./mysftp.sh 192.168.15.25
=============================
아래는 내가 만든, 여러개의 DB 를 백업하는 쉘스크립트 예제이다.
#!/bin/sh
OPTIONS="-u root -pRootPassword --routines --extended-insert --quick --single-transaction"
BACKUP_DIR=/home/hahaite/MDB_Backup
DB_LIST="mydb_1"
DB_LIST="$DB_LIST mydb_2"
DB_LIST="$DB_LIST mydb_3"
DB_LIST="$DB_LIST mydb_4"
for DB_NAME in $DB_LIST
do
mysqldump $OPTIONS $DB_NAME > $BACKUP_DIR/${DB_NAME}_$(date "+%Y-%m-%d_%H").sql
echo "cd dbTest" > mysftp.sh
echo "put ${DB_NAME}_$(date "+%Y-%m-%d_%H").sql" >> mysftp.sh
cat ./mysftp.sh
sftp -b ./mysftp.sh 192.168.15.25
done
♣ SFTP를 이용한 Database Backup 수행
위 스크립트는 내가 직접 실행하면 문제가 없지만 타이머에 의해서 실행되면 에러가 난다.
내가 직접 실행하면 내 계정으로 실행하는 것이지만,
타이머로 실행되면 root 계정으로 실행되기 때문이다.
이에 위 do ~ done 부분을 아래와 같이 수정하여 해결하였다.
-u 옵션에 내 계정(hahaite)를 지정해 주고, ssh private key 를 사용하여 백업서버에 접속하도록 하였다.
do
mysqldump $OPTIONS $DB_NAME > $BACKUP_DIR/${DB_NAME}_$(date "+%Y-%m-%d_%H").sql
echo "cd dbTest" > mysftp.sh
echo "put ${DB_NAME}_$(date "+%Y-%m-%d_%H").sql" >> mysftp.sh
cat ./mysftp.sh
sudo -uhahaite sftp -i /home/hahaite/.ssh/hahaite -b $BACKUP_DIR/mysftp.sh 192.168.15.25
done