서버 | 우분투 간 백업방법, Rsync(알싱크)

|

요약

image 145
서버 | 우분투 간 백업방법, Rsync(알싱크) 3

rsync는 서버간 자료 전송을 진행할 수 있는 프로그램입니다.
요즘은 우분투에 기본 내장으로 설치되어 있어 추가로 설치할 필요 없이 바로 사용할 수 있습니다.

설치

apt-get install rsync

설치되지 않았을 경우 명령어를 입력하여 설치를 진행합니다.

사용법

rsync -azP ~/홈디렉토리보낼폴더파일전체 아이디@192.168.0.1:~/홈디렉토리/rsync/dest

인증서 키 생성

파일을 전송할 계정으로 로그인합니다.
(아래의 설명은 ubuntu 계정을 전제로 설명을 진행합니다)

ssh-keygen -t rsa

키 생성은 아래의 순서로 진행됩니다.
변경점이 없다면 엔터키를 눌러 모두 스킵합니다.

  • 키 저장 경로 (기본값 : $HOME/.ssh/id_rsa)
  • 추가 사용할 암호 (passphrase)
  • 추가 사용할 암호 확인 (passphrase)

원격 키 생성

image 152
서버 | 우분투 간 백업방법, Rsync(알싱크) 4

A 서버(로컬 서버)에 접근하기 위해
B 서버(리모트 서버)에 키를 등록합니다.

서버 인증 파일 저장

  • B 서버 계정에 로그인합니다.
  • 계정의 홈 디렉토리에 .ssh 폴더를 만듭니다.
    mkdir ~/.ssh
  • 파일을 생성합니다
    touch ~/.ssh/authorized_keys
  • 읽기 쓰기 권한을 설정합니다
    chmod 644 ~/.ssh/authorized_keys
  • A 서버의 키를 B 서버(유저 홈 디렉토리)에 붙여넣기합니다.
    • A 서버에 있는 ~.ssh/id_rsa.pub 파일 내용을 복사합니다
    • B 서버의 ~/.ssh/authorized_keys 파일에 붙여넣기합니다

파일 백업

Data 백업

tar -zcf backup-$(date +%Y%m%d).tar.gz -C /var/www/ html
  • /var/www/html 에서 >>>>>>>> 현재 있는 폴더
  • backup-20220921.tar.gz 파일을 생성합니다.

/var/www/ html 와 같이 마지막 폴더는 한칸 떨어트려야 합니다.

cd

자신의 홈 디렉토리로 이동합니다.

mkdir backups
cd backups

backups 폴더를 만들고 이동합니다

mkdir daily
mkdir weekly
mkdir monthly

일간, 주간, 월간 백업 자료를 보관할 폴더들을 생성합니다

tar -zcf ~/backups/daily/backup-$(date +%Y%m%d).tar.gz -C /var/www/ html

파일을 백업합니다.
앞에 ~ 를 붙이면 로그인한 계정의 홈 디렉토리를 기준으로 합니다.

find ~backups/daily/* -mtime +7 -delete

현재 시점에서 7일보다 오래된 자료를 삭제한다는 명령어입니다.

DB 백업

데이터베이스 한개 백업

mysqldump -u 계정 -p패스워드 DB명 > /디렉토리/파일명.sql
#!/bin/bash
BACKUP_DIR=/home/bktest

USERNAME="root"
PASSWORD="root123"
DATABASE="test"
mysqldump -u$USERNAME -p$PASSWORD $DATABASE > $BACKUP_DIR/backup.sql

데이터베이스 전체 백업

mysqldump -u 계정 -p패스워드 --all-databases > /디렉토리/덤프파일
#!/bin/bash
BACKUP_DIR=/home/bktest

USERNAME="root"
PASSWORD="root123"
DATABASE="test"
mysqldump -u$USERNAME -p$PASSWORD --all-databases > $BACKUP_DIR/backup.sql

rsync 동기화

  • rsync {로컬폴더경로} 계정명@아이피주소:{원격폴더경로}

기본 구조는 위와 같습니다.

rsync -avz --delete -partial /backups/ [email protected]:~/backups

위의 코드를 응용하여 원격 파일 전송을 마칠 수 있습니다.

  • a : archive 파일을 속성까지 복사합니다
  • v : verbosity 로 복사과정을 자세하게 보여줍니다.
  • z : 파일을 복사할 때 압축해서 복사합니다.
  • h : 사람이 읽기 쉬운 형태로 복사 결과들을 출력합니다.
  • –delete : 이 옵션을 넣으면 원본 폴더에서 지운 파일을 삭제합니다.
    (원본 폴더에서 삭제한 파일은 리모트에서 싱크할 때 삭제되지 않습니다)
  • e : ec2 에 접속하기 위해서는 pem 파일이 필요합니다.
    이를 위해 -e 옵션을 통해 ssh 접속법을 지정했습니다.
  • -partial : rsync는 전송중에 인터럽트(전송중단) 이 발생하면 파일을 삭제합니다.
    이것을 사용하면 전송된 부분 파일을 남기고 다음 부분부터 재전송할 수 있습니다.
  • -progress : 전송 시 진행상황을 보여줍니다

rsync 데몬(port 873) 접속

포트 열기

AWS를 사용하는 경우는 관리자 화면에서 873 포트를 오픈합니다.

파일 생성

cat /etc/rsyncd.conf

/etc/rsyncd.conf 파일을 생성합니다.

[add4s]
comment = add4s add file
path = /home/add4s/public_html
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 43.201.53.159
max connection = 2
timeout = 300
  • comment : 코멘트
  • path : 백업 경로
  • uid : 접속 권한
  • gid : 접속 그룹 권한
  • use chroot : 백업 경로를 최상위로 사용
  • read only : 읽기 전용 설정
  • host allow : 접속을 허용할 IP
  • max connection : 최대 접속 가능
  • timeout : 클라이언트에서 접근 시 타임아웃 시간

자동 예약 등록

A 서버(로컬 서버)에 Cron 서비스를 등록합니다.

sh 파일 생성

nano ~/backups/backup.sh

backup.sh 파일을 생성합니다.

tar -zcf ~/backups/daily/backup-$(date +%Y%m%d).tar.gz -C /var/www/ html
find ~/backup/daily/* -mtime +7 -delete
rsync -avz --delete -partial /backups/ [email protected]:~/backups

위의 내용을 backup.sh 에 저장합니다.

crontab -e
15 0 * * * sh /ubuntu/backups/backup.sh

매일 같은 시간에 sh파일을 실행합니다.

권한부여

계정 생성

sudo adduser rading
sudo usermod -a -G www-data rading

rading 유저를 만들고 www-data 권한을 부여합니다.

sudo nano /etc/passwd

수정 후 : rading:x:33:33:,,,:/var/www/html:/bin/bash

권한을 33:33 으로 변경합니다. www-data 로 권한을 변경하게 됩니다.

폴더 권한 변경

sudo chown -R www-data:www-data /var/www/html

외부 로그인 설정

경고 : 이 방법은 권장하지 않습니다.
비밀번호를 생성하면 무차별 대입 공격(Broute Force Attack)의 표적이 될 수 있습니다

sudo nano /etc/ssh/sshd_config

외부 로그인 설정을 위해 ssh 설정에 접근합니다.

  • root 계정 외부 로그인 허용
    PermitRootLogin yes
  • 비밀번호 로그인 허용
    PasswordAuthentication yes
  • 공개키 접속 허용
    PubkeyAuthentication yes

SSH 암호 키로 로그인 하는 것이 안전한 것은 사실이지만 설정 방법은 알고 있는 것이 좋습니다.
비밀번호 로그인을 위해 PasswordAuthentication 설정을 찾아서 위와 같이 변경합니다

그 다음 Ctrl + XYEnter 를 입력하여 저장 후 에디터를 종료합니다.

sudo service sshd restart

sshd를 재시작합니다.

참조

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

클릭하여 복사