꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

DATABASE

sql 백업

gold_dragon 2020. 11. 30. 14:41

crontab -> 유닉스 OS 계열에서 특정 시간에 특정 작업을 해야하는 경우 사용하는 스케줄러입니다.

1. crontab basic

 

1.1 스케줄 설정 : 아래의 커맨드를 입력하면 스케줄을 설정할 수 있는 vi 에디터 페이지가 생성됩니다. 여기에 어떤 주기로 어떤 파일을 실행할지에 대한 리스트를 작성해주면 됩니다.

$ crontab -e

 

1.2 스케줄 리스트 확인 : 현재 crontab의 스케줄을 확인할 수 있습니다.

$ crontab -l

 

2. 주기 설정

터미널로 aws에서 만든 서버에 접속한 후 'vi time.py' 명령어로 파일 생성 후 vi 에디터가 열리면

"

import datetime

today = datetime.datetime.now()

print(str(today))

"

위 내용을 입력해 줍니다. 그 후 'phthon3 time.py'로 파일을 실행하면 현재 시간이 나올 겁니다. 에러가 발생하면 에러가 발생한 이유가 나올겁니다. 확인 후 'chrontab -e'를 입력 후 2번을 선택해줍니다. 그러면 vi 에디터가 열립니다. 열리는거 확인하고 다음에는 time zone을 변경해보겠습니다.

 

time zone 변경

'timedatectl' 명령어를 통해서 현재 시간을 확인할 수 있습니다. 확인 후 'sudo timedatectl set-timezone Asia/Seoul'를 입력하면 한국시간으로 바뀝니다.

 

crontab 로그 확인

'grep CRON /var/log/syslog' 명령어를 통해서 crontab의 시스템 로그를 확인할 수 있습니다. 만약 오류가 있다면 여기서 확인할 수 있습니다. 오류 메세지를 확인하는 방법은 'sudo apt-get install postfix' 명령어를 통해서 postfix를 기본값으로 설정해서 설치하고 'cat /var/mail/ubuntu' 명령어를 통해서 오류 메세지를 확인할 수 있습니다. 만약 가독성이 좋지 않다고 느껴지면 'sudo apt install mailutils'로 유틸리티를 설치해주고 'mail' 명령어로 오류 하나하나 구체적으로 오류 메세지를 확인할 수 있습니다.

 

backup의 종류

hot backup -> 데이터 베이스를 중지하지 않은 상태로 데이터를 백업합니다. / 백업하는 동안 서비스가 실행됩니다. / 백업하는 동안 데이터가 변경되어 완전한 백업이 안될 수도 있습니다.

 

cold backup -> 데이터 베이스를 중지한 상태로 데이터를 백업합니다. / 안정적으로 백업이 가능합니다. / 백업하는 동안 서비스가 중단되어야 합니다.

 

logical backup -> sql문으로 백업합니다. / 느린 속도로 백업과 복원이 이루어집니다. / 디스크 용량을 적게 사용합니다. / 작업시 시스템 자원을 많이 사용합니다. / 문제 발생에 대한 파악이 쉽습니다. / 서버 OS 호환이 잘됩니다.

 

physical backup -> 파일 자체를 백업합니다. / 빠른 속도의 백업과 복원이 이루어집니다. / 작업시 시스템 자원을 적게 사용합니다. / 문제 발생에 대한 파악과 검토가 어렵습니다. / 서버 OS 호환이 잘 안될 수 있습니다.

 

logical backup을 실행해보겠습니다.

서버 루트 위치에 backup 폴더를 만들어줍니다.

서버 터미널에서 mysqldump -u root -p test > ~/backup/test_backup.sql 명령어를 입력해줍니다.

그러면 물리적 백업이 완료됩니다.

그 후 vi backup.sh 명령어를 입력하면 vi 에디터가 열립니다. 그 안에 다음 내용을 입력해줍니다.

"

#!/bin/bash

 

BD=`date +%Y%m%d_%H%M --date=today`

FILE=${BD}.sql

 

echo "mysqldump -u root -p test > $FILE"

"

저장 후 에디터에서 나와서 /bin/bash backup.sh를 입력해서 mysqldump -u root -p test > 날짜.sql이 나오면 잘 만들어진겁니다.

 

다시 vi backup.sh 명령어로 vi 에디터에 들어가서 다음 내용을 추가 입력해줍니다.

"

#!/bin/bash

 

BD=`date +%Y%m%d_%H%M --date=today`

FILE=${BD}.sql

 

cd ~/backup

mysqldump -u root -p test > $FILE

"

저장 후 에디터를 나옵니다. 그 후 /bin/bash backup.sh 명령어를 입력 후 backup 폴더를 보면 백업 파일이 생긴 것을 확인할 수 있습니다.

그 후 crontab -e 명령어로 vi 에디터가 열리면 맨 위에

* * * * * /bin/bash ~/backup.sh

위 내용을 입력해줍니다.

그런데 현재 mysqldump를 사용할 수 없기 때문에 mysqldump를 쓸 수 있도록 환경을 설정해주어야 됩니다.

맨 위에 아래 내용을 추가해줍니다.

PATH=/usr/bin:/bin

그러고 나서 저장하고 에디터에서 나갑니다.

 

그러면 1분마다 backup 폴더에 파일이 생길겁니다.

그 파일을 가져올 때는 mysql -u root -p backup < backup/20201130_1433.sql 명령어를 통해서 백업 파일을 가져올 수 있습니다.

'DATABASE' 카테고리의 다른 글

mssql 개인적으로 기억할 query  (0) 2021.05.02
mongoDB (AWS EC2)  (0) 2020.11.30
sql에서 function 종류  (0) 2020.11.26
데이터베이스 모델링 및 sql문  (0) 2020.11.24
AWS를 이용해서 mysql 사용하기  (0) 2020.11.23