본문 바로가기
Database

MySQL 일일 단위 백업 자동화

by BTC_홍대동무 2023. 12. 29.

베하 ~~!

BTC 현상수배범입니다. 한해가 마무리 되고 있네요 ^^ 다들 즐거운 연말되시길 바랍니다~!

 

이번 시간에는 MySQL 일일 단위 백업 자동화하는 방법에 대해 같이 실습해보도록 하겠습니다.

 

 

[참고자료]

Mysql 일단위 백업 자동화

[AWS] ubuntu에 Mysql 설치하기

 

[AWS] ubuntu에 Mysql 설치하기

EC2에 Mysql을 설치해보자! 1. 먼저 우분투 서버를 업데이트하고 Mysql-server를 설치한다. 2. Mysql에 접속해준다. 설치하면서 별도로 비밀번호를 설정하지 않은 경우, 비밀번호 입력 창에서 엔터를 입

velog.io

 

1. 우분투 서버를 업데이트하고 Mysql-server를 설치

sudo apt-get update
sudo apt-get install mysql-server

 

2. Mysql에 접속

sudo mysql -u root -p

 

3. Myql ROOT 비밀번호를 변경

alter user 'root'@'localhost' identified with mysql_native_password by '123456';

 

4. 사용할 DB를 생성

mysql> create database test;

 

5. 테이블 생성 및 데이터 Insert

mysql> use test
Database changed

mysql> CREATE TABLE users (
    ->     user_id INT AUTO_INCREMENT PRIMARY KEY,
    ->     username VARCHAR(50) NOT NULL,
    ->     email VARCHAR(100) NOT NULL,
    ->     password VARCHAR(255) NOT NULL,
    ->     registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    -> );

mysql> INSERT INTO users (username, email, password) VALUES
    -> ('john_doe', 'john@example.com', 'hashed_password_123'),
    -> ('jane_smith', 'jane@example.com', 'hashed_password_456'),
    -> ('bob_jones', 'bob@example.com', 'hashed_password_789');

mysql> select * from users;
+---------+------------+------------------+---------------------+---------------------+
| user_id | username   | email            | password            | registration_date   |
+---------+------------+------------------+---------------------+---------------------+
|       1 | john_doe   | john@example.com | hashed_password_123 | 2023-12-22 06:08:41 |
|       2 | jane_smith | jane@example.com | hashed_password_456 | 2023-12-22 06:08:41 |
|       3 | bob_jones  | bob@example.com  | hashed_password_789 | 2023-12-22 06:08:41 |
+---------+------------+------------------+---------------------+---------------------+

 

6. /home/ubuntu 경로에 백업 디렉토리 생성

mkdir backup

 

7. /home/ubuntu/backup 경로에 백업 스크립트 쉘 작성

cat backup.sh
#!/bin/bash

echo " "
echo "## Backup Start"
echo " "
datetime=$(date +%Y_%m_%d)
echo "## 5일전 백업 삭제 하기"
echo " "
sudo find /home/ubuntu/backup/*.tar.gz -ctime +5 -exec rm -f {} \\;

echo "## DB 백업"
echo " "
mysqldump -u"$DB_USER" -p"$DB_PASSWORD" --all-databases > /home/ubuntu/backup/mysql_bak_$datetime.sql

# 해당 디렉토리로 이동
cd /home/ubuntu/backup/

# .sql 파일 압축 및 생성
tar -zcvf /home/ubuntu/backup/mysql_bk_$datetime.tar.gz -C /home/ubuntu/backup/ mysql_bak_$datetime.sql

# .sql 파일 삭제
rm -f *.sql

echo "## Backup finish"
echo " "

 

8. 스크립트를 영구적 자동 실행 및 보안을 위해 환경변수 등록

cat ~/.bashrc | grep DB
##DB_USER##
export DB_USER="root"
##DB_PASSWORD##
export DB_PASSWORD="123456"

source ~/.bashrc

 

9. 쉘 스크립트 권한 변경

chmod +x backup.sh

 

10. Crontab에 등록

vi crontab -e
0 0 * * * /home/ubuntu/backup/backup.sh 

#매일 자정 00시에 쉘스크립트 자동 실행

 

 

11. 시간 변경 후 스크립트 자동 실행 테스트

sudo date -s "2023-12-21 23:59:40"
Thu Dec 21 23:59:40 UTC 2023

ubuntu@ip-10-0-9-157:~/backup$ date
Thu Dec 21 23:59:42 UTC 2023

ubuntu@ip-10-0-9-157:~/backup$ ls
backup.sh  mysql_bk_2023_12_22.tar.gz

 

12. Mysql 데이터 삭제 후 백업 되는지 테스트

mysql -u root -p

mysql> DROP DATABASE test;
Query OK, 1 row affected (0.04 sec)

mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> exit
Bye

ubuntu@ip-10-0-9-157:~/backup$ tar -zxf mysql_bk_2023_12_22.tar.gz

ubuntu@ip-10-0-9-157:~/backup$ ls
backup.sh  mysql_bak_2023_12_22.sql  mysql_bk_2023_12_22.tar.gz

ubuntu@ip-10-0-9-157:~/backup$ mysql -u root -p < /home/ubuntu/backup/mysql_bak_2023_12_24.sql
Enter password:

 

 

이렇게 하여 EC2에 mysql을 설치하고 백업스크립트를 작성한 후에 크론탭에 등록하는 과정까지 해보았습니다~!

백업된 .sql 파일을 복원하는 방법에 대해서도 알아봤는데요~

같이 한번 따라하시다보면 이해가 될 거라 생각해요~! 

 

다음에 또만나요 ~!!

 

베빠~~

'Database' 카테고리의 다른 글

[GA4] 이벤트란?  (0) 2024.01.18
Redis의 Node와 Shard  (1) 2024.01.05
Airflow 환경 이전  (0) 2023.12.24
Python 클라이언트 라이브러리를 사용하여 Cloud Pub/Sub로 메시지 게시  (0) 2023.12.15
Pub/Sub  (0) 2023.12.15

댓글