[UniLetter] MySQL DB 자동 백업 스크립트

Seohyun-kim·2022년 11월 13일
0
post-thumbnail

0. 문제 발생!

기존에는 이벤트를 등록하는 페이지에서
모바일단에서 800자 이내로 입력 가능하다고 안내했고,
서버에서 1000자 이상의 입력이 오면 씹히는 구조였다..

그래서 이벤트의 내용이 길어지면, 요약해서 작성해야 했고
공모전과 같은 안내 내용은 대부분 내용이 많은데
body안에 담으려면 잘려나가는 정보가 너무 많았다.


그래서 최대길이를 변경했다.

Event 엔티티의 body 필드에 1000으로 되어있던 length를 10000으로 수정해주었다.

  @Column({comment: '본문.', length: 10000})
  body: string;

그랬더니 body가 텅~ 날라가버렸다...

하.....

다른 것도 아니고 제일 내용 긴 body만..............
아휴.......

백업의 필요성을 깨달았다..

원래도 db를 로컬과 서버를 sync 해주는 스크립트는 있었지만
로컬에서 여러 테스트를 하느라 주기적으로 동기화를 시키진 않았다.


그나마 다행이야

아직 서버단에서 페이징 작업을 하지 않아서 많은 이벤트를 내리느라 로딩이 느렸다.

그래서 이참에 쓸데없는 옛날 이벤트들을 많이 삭제하고

일부 우리 서비스를 보여줄만한 이벤트들을 냅두고,
body를 다시 원래 공지글을 찾아서 넣었다.

한 30개정도만 남겨두었다.

오히려 iOS출시 기념 새롭게 다 작성하는 느낌도 있고... 오히려 좋아...다행이야

그래서 이제 자동 백업해두는(dump) 스크립트를 짜봄.ㅎㅎ



1. DB 백업 스크립트 작성

1.1 db_backup.sh (dump)

db_backup.sh

#!/bin/bash

DATE=$(date +%Y-%m-%d)
BACKUP_DIR=/home/appcenter/backup

if [ ! -d $BACKUP_DIR ]; then
  mkdir $BACKUP_DIR
fi

# mysql dump (비번예시 1234일때)
mysqldump -u root -p1234 --databases inu_events > $BACKUP_DIR/"backup_"$DATE.sql

# 7일 이상 지난 데이터는 삭제
find $BACKUP_DIR -ctime +7 -exec rm -f {} \;
  • DATE : 현재 날짜를 가져온다.

  • BACKUP_DIR : 백업할 디렉토리 위치를 설정한다.

  • 백업할 디렉토리가 없으면 새로 생성한다. (이미 만들었으면 안써도 되기는 함)

  • mysql 데이터 베이스를 dump 한다.

    mysqldump -u root -p{비밀번호} --databases {데이터베이스명} > $BACKUP_DIR/"backup_"$DATE.sql
    • 백업 디렉토리 내에 backup_오늘날짜.sql 파일로 저장된다.
  • 하루에 한 번 이 스크립트를 실행할건데, 그러면 너무 많이 쌓이니까
    일주일이 지난 데이터는 강제 삭제한다.


1.2 실행 권한 부여

~/backup$ chmod +x ./db_backup.sh


2. 스크립트 실행 반복 (스케줄링)

위 스크립트를 이제 하루에 한 번 매일 오전 6시에 딱 맞추어 백업을 하도록 한다.

왜 6시냐면 제일 유저 없을 것 같아서!
밤새도 딱 새벽 5시 지나면 이제 슬슬 졸리기 시작하고
아침에 6시에 일어나긴 쉽지않음 ㅎㅎ 한 번도 없는듯

2.1 crontab 편집

  # Edit this file to introduce tasks to be run by cron.
  #
  # 어쩌구 저쩌구
  # For more information see the manual pages of crontab(5) and cron(8)
  #
  # m h  dom mon dow   command

  # 매일 오전 6시에 db 백업
  0 6 * * * /home/appcenter/backup/db_backup.sh
  • 주석으로 되어있는 파일이 뜰 거고
    우리가 실행할 파일을 적어준다.

  • crontab 스케줄링 시간 확인하는 참고 사이트 : crontab guru

  • 매일 오전 6시에 실행한다.


2.2 crontab 리스트 확인 명령어

$ crontab -l 

2.3 변경된 cron 재시작(restart)

$ service cron restart
  • 사용자 계정 고르기
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to restart 'cron.service'.
    Multiple identities can be used for authentication:
     1.  Ubuntu (ubuntu)
     2.  ,,, (appcenter)
    Choose identity to authenticate as (1-2): 2
  • 패스워드 입력하면 재시작 됨.


3. 파일 생성 확인

~/backup$ ls
backup_2022-11-11.sql  backup_2022-11-12.sql  backup_2022-11-13.sql  db_backup.sh

잘 생성되었다!

나중에 이 파일이 필요하게 되면 import 해 주면 됨!

0개의 댓글