리눅스 MYSQL(MariaDB) BACKUP(dump) 하기

성난호랑이 시니철 ㅣ 2024. 5. 2. 15:30

리눅스 MYSQL(MariaDB) BACKUP 하기

 

CentOS Linux release 7.2 사용중

 

매일 새벽 동작 하게 하기 위해 크론탭을 사용

 

crontab -e 작성

crontab -l 확인

 

*      *      *      *      *
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)

 

vi와 동일하게 작업이 가능합니다 :wq 저장하면 됩니다.

 

간단하게 하실분은 crontab에 바로 덥프를 작성하면 됩니다.

 

참조 :

10 2 1 * * /usr/local/mariadb/bin/mysqldump -u'유저아이디' -p'비밀번호' 
--single-transaction '데이터베이스' > "디렉토리및 파일 이름.sql"

 

 

간단하게 dump backup을 할수있지만 .bash 작성해서 작업하였습니다.

#! /usr/bin/env bash

set -e

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

DATE_YESTERDAY=$(date '+%Y-%m-%d' -d yesterday)
DATE=$(date '+%Y-%m-%d')
DB="데이터베이스이름1 데이터베이스2 "
BACKUP_YESTERDAY_DIR="/data/backup/${DATE_YESTERDAY}"  #backup 폴더 위치
BACKUP_TODAY_DIR="/data/backup/TODAY"                  #backup 폴더 위치
backpass=BackUp!@34                                    #폴더 .gz 압축파일 비밀번

# 디렉터리 생성
if [ ! -d "${BACKUP_TODAY_DIR}" ];then
        mkdir -p "${BACKUP_TODAY_DIR}"
fi

TODAY_MOD_DATE=$(stat -c %y "${BACKUP_TODAY_DIR}" | awk '{ print $1 }')

# 디렉터리 생성 , 이동 
if [ "${TODAY_MOD_DATE}" != "${DATE}" ];then
        mv "${BACKUP_TODAY_DIR}" "${BACKUP_YESTERDAY_DIR}"
        mkdir -p "${BACKUP_TODAY_DIR}"
else
        echo "Backup is failed! Backup directory cannot be made." > /data/backup/BACKUP_FAILED
        exit 1
fi


echo "====================================="

# DB에있는 데이터베이스 전체 반복
# mysqldump 
for db in ${DB}
do
        echo "------------------------------"
        date
        echo ${db}
        /usr/local/mariadb/bin/mysqldump -uroot -p'password' --single-transaction ${db} > "${BACKUP_TODAY_DIR}/${db}_${DATE}.sql"
        sleep 10
        echo "------------------------------"
done

echo "====================================="

# 압축 및 삭제 
for db in ${DB}
do
        gzip -c "${BACKUP_TODAY_DIR}/${db}_${DATE}.sql" > "${BACKUP_TODAY_DIR}/${db}_${DATE}.sql.gz"
        sleep 300
        rm -f "${BACKUP_TODAY_DIR}/${db}_${DATE}.sql"
done

# sshpass란 다른 컴퓨터에 바로 ssh 연결을 할 수 있고, 연결된 컴퓨터에서 명령어를 실행할 수 있는 기능 
# sshpass -p 'ssh접속비밀번호' ssh 'ssh접속계정'@'ssh접속주소' '명령어'
sshpass -p$backpass scp -r /data/backup/TODAY backupuser@172.16.1.66:/data/backup/

# 오래된 파일 삭제 
find /data/backup -maxdepth 1 -type d -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}.*' -mtime +7 -exec rm -rf {} \;

 

crontab 

10 0 * * * /data/backup/mysql_dump.bash >> /data/backup/mysql_dump.log 2>&1

 

궁금한 점이나 문의사항있으시면 댓글 부탁드립니다 ~ ^^

 

'공부 > Linux' 카테고리의 다른 글

CentOS7 Java1.8 -> Java11 버전 변경  (0) 2024.02.26
Red Hat MariaDB 설치  (0) 2024.02.19
리눅스 vi /vim 단축키  (0) 2015.12.10
리눅스 디렉터리  (0) 2015.12.10
[Linux] 리눅스 디렉토리 구조를 살펴보자  (0) 2015.12.10