Docker ubuntu , mysql 환경 구성 및 MySQLdump

Yono·2023년 8월 16일
post-thumbnail

현재 진행중인 작업은 리눅스 환경에서 매일, 매주 , 매월 Mysql dump 생성하는 작업이다.

이 과정에서 제일 머리가 아픈건 어떻게 운영과 같은 환경에서 테스트를 해볼것 인지였다.

첫번째로 들었던 생각은 퍼블릭클라우드에서 뭐 하나 따서 쓰지 뭐 였다 하지만 비용이 발생하므로 보류했다.

두번째로 들었던 생각은 도커에 우분투 컨테이너를 올리고 그 위에 MySQL을 설치한다면? 이란 생각을 했다. 아래는 그 내가 선택한 두번째 결과물이다.

1. docker ubuntu install

$ docker pull ubuntu:20.04 

2. docker ubuntu run

$ docker run -p 3306:3306 --name ubuntu-mysql-container -it ubuntu:20.04

p 3306:3306에서 첫 번째 3306은 호스트 시스템의 포트를 의미한다.
두 번째 3306은 컨테이너 내부의 포트를 의미한다.

따라서 p 3306:3306 은 컨테이너 내부의 3306 포트와 호스트 시스템의 3306 포트를 연결하는 것이다.
MySQL의 기본 포트는 3306 이므로, 이 명령어를 사용하면 컨테이너 내부에서 실행되는 MySQL 서비스를 호스트 시스템의 3306 포트를 통해 접근할 수 있게 된다.

그러나 여기서 주의할 점은, 위의 명령어로는 그저 우분투 컨테이너만 실행되며, MySQL은 별도로 설치 및 설정해야 합니다.

3. ubuntu container 접속

docker exec -it [컨테이너 이름 또는 ID] /bin/bash

4. ubuntu mysql install

$ apt update
$ apt-get install mysql-server

설치를 완료하면

service mysql start

명령어로 MySQL 을 실행 할 수 있다.

Mysql 실행하기전 !!!!

나는 DataGrip에서 연결할거라 127.0.0.1 -> 0.0.0.0으로 bind-address 를 변경했다.

/etc/mysql/mysql.conf.d 경로에서 mysqld.cnf 을 수정했다.

컨테이너 외부에서 접근할것이라 그냥 오픈했다.

mysql -u root -p 

를 통해서 mysql에 접근하고

create database test;

테스트 데이터베이스를 만들었다.

필자는 DataGrip을 사용중이라 데이터그립에서 접근해 더미데이터를 만들었다.

https://generatedata.com/

더미데이터는 상기 사이트를 이용해 만들었다.

더미데이터를 insert 시키고 이제 기존에 짜둔 script 를 가져왔다.

######


#!/bin/bash

USER="your_username"
PASSWORD="your_password"
DATABASE="your_database_name"
BACKUP_ROOT="/path/to/backup"

PERIOD=$1

YEAR=$(date +\%Y)
MONTH=$(date +\%m)
DAY=$(date +\%d)
DATE_FORMAT="${YEAR}-${MONTH}-${DAY}"

case $PERIOD in
    daily)
        BACKUP_PATH="${BACKUP_ROOT}/daily/${DATE_FORMAT}"
        ;;
    weekly)
        
        BACKUP_PATH="${BACKUP_ROOT}/weekly/$(date +\%Y-\%m-\%d -d "Sunday")"
        ;;
    monthly)

        BACKUP_PATH="${BACKUP_ROOT}/monthly/${YEAR}-${MONTH}-01"
        ;;
    *)
        echo "Invalid backup period. Choose from daily, weekly, or monthly."
        exit 1
        ;;
esac

BACKUP_FILE="backup_${DATE_FORMAT}.sql"
mkdir -p ${BACKUP_PATH}
mysqldump -u ${USER} -p${PASSWORD} ${DATABASE} > ${BACKUP_PATH}/${BACKUP_FILE}

쉘 스크립트에 Cron으로 dump를 뜰 생각 이였다.

vim backup.sh

상기 명령어를 통해 기존에 만들어둔 쉘 스크립트를 만들었다.

./backup.sh daily 

명령어를 통해 해당 스크립트를 실행하였다.

dump가 정상적으로 나온것을 확인하였다.

Cron을 이용해 백업을 할거라

crontab -e 

0 0 * * * /backupscript/backupscript.sh daily
0 0 * * 0 /backupscript/backupscript.sh weekly
0 0 1 * * /backupscript/backupscript.sh monthly

상기와 같이 작성 하였다.

오늘 했던 작업은 리눅스 환경에서 Mysql 의 데이터를 백업하는 작업이였다.

문의는 댓글로 남겨주길 바란다.

profile
Java,Spring,JavaScript

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

많은 도움이 되었습니다, 감사합니다.

답글 달기