세상에서 제일 쉬운 MySQL 백업

sojukang·2022년 8월 30일
0
post-custom-banner

MySQL 백업 환경

세상 살기 참 어렵습니다. 잘 둔 친구 하나로 만족할 수 있을까요? 믿는 도끼는 발등을 찍으라고 있는 법입니다. 우리는 언제나 최악에 대비해야겠죠.
우리 DB 서버도 마찬가지입니다. 잘 둔 DB 서버 하나 두 서버 부럽지 않기는 개뿔 돈이 허락하면 두 서버가 좋습니다. 그래서 메인 서버가 날아가도 그 마음 고이 담아 간직할 수 있는 백업 서버를 설정해보도록 합시다. 뭘로요? MySQL로요. 어떻게? 세상에서 제일 쉽게.

일단 MySQL이나 깔아봅시다.

우리의 친구 Ubuntu 22.04 버전에서 진행해보도록 하겠습니다. 다른 Linux 버전도 크게 다르지 않습니다.

sudo apt update

초기 설정이라면 우리의 친구 sudo apt update 해주시고

sudo apt install mysql-server

MySQL을 설치해 봅시다.

sudo mysql -u root

설치가 잘 되었는지 확인도 해봅시다.

Linux 서버 시간 기준 UTC -> KST 변경

sudo timedatectl set-timezone Asia/Seoul

이제 메인 SQL 서버로 가봅시다.

우리는 백업 서버에서 메인 서버의 스키마와 데이터를 가져올 겁니다.

우선 메인 SQL 서버에 백업 SQL 서버 유저를 등록해줍시다.

CREAT USER {backup_user}@'{ip}' identified by '{password}';
GRANT ALL PRIVILEGES ON {database_name}.{table_name} to '{backup_user}'@'{ip}'; 
FLUSH PRIVILEGES;

{}사이에는 자신에게 해당하는 값을 올리면 됩니다. 유저를 생성하고, 권한을 부여하는 과정입니다.

이제 다시 백업 SQL 서버로 가봅시다.

메인 서버에 잘 접근할 수 있는지 테스트 해봅시다.

mysql -h {main_server_ip} -u {backup_user} -p

잘 접근할 수 없다면 메인 서버의 bind 설정이 잘 열려있는지 확인해봅시다.

메인 DB 서버 -> 백업 DB 서버로 백업 sql 파일 전송(dump)

mysqldump -u backup_db -p review_duck -h ${ip} > /home/ubuntu/db_backup/${backup_file}

백업 DB 서버에서 백업 파일 실행

sudo mysql -h localhost -u root review_duck < /home/ubuntu/db_backup/${backup_file}

운영중인 DB를 일일이 돌며 백업시켜주는 건 너무 귀찮고 비효율적이기 때문에 스크립트를 만들어 자동으로 실행시켜줍시다. 주기적인 동작을 위해 crontab을 사용하고, 지정된 시각마다 작성한 스크립트를 실행시켜보겠습니다.

백업 스크립트

#!/bin/sh

echo "starting db backup"
day="$(date +'%F_%H')"
db_backup_file="mydb_${day}.sql"
mysqldump -u backup_db -p'duck' review_duck -h ${ip} > /home/ubuntu/db_backup/${db_backup_file}
echo "db backup complete"
sudo chmod +x /home/ubuntu/db_backup/${db_backup_file}
sudo mysql -h localhost -u root review_duck < /home/ubuntu/db_backup/${db_backup_file}

계속 쌓이는 백업 파일을 주기적으로 삭제해줄 코드를 추가해도 좋습니다.

스크립트 실행을 위한 권한 부여

sudo chmod +x db_backup.sh

스케줄링을 위한 crontab 설정 파일 수정

sudo crontab -e
0 0 * * * sudo /home/ubuntu/db_backup/db_backup.sh > /dev/null 2>&1

0분 0시(자정)마다 해당 스크립트를 실행하는 코드

참고

라라(Team 땡쿠)

profile
기계공학과 개발어린이
post-custom-banner

0개의 댓글