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

 

+ Recent posts