[mariadb-10.3] backup script 만들어보기

mimic1995·2023년 12월 27일
0
post-custom-banner

목표 : 백업 제외시킬 Dabatase 명 목록을 생성하고 DB 서버에서 Database 명 목록을 조회하고 제외 목록이 아닐 경우 백업을 진행하도록 설정함.

사전 작업

DB 버전 확인

Server version: 10.3.39-MariaDB MariaDB Server
mysql  Ver 15.1 Distrib 10.3.39-MariaDB, for Linux (x86_64) using readline 5.1

dummy database employees.sql 생성

https://github.com/datacharmer/test_db

cd ~
git clone https://github.com/datacharmer/test_db
cd test_db/employees.sql
# 방법 1
mysql -uroot -p < employees.sql
# 방법 2
mysql -uroot -p 
mysql> source employees.sql
systemctl restart mariadb

백업을 제외시킬 database 생성

mysql> create database test1;
mysql> create database test2;

백업 계정 생성 및 DB, host 접근 권한 부여

# 원격지 백업인 경우
mysql> create user 계정명@'%' identified by '비밀번호';
# 로컬 백업인 경우 
mysql> create user 계정명@'localhost' identified by '비밀번호';
# 권한 부여
mysql > grant all privileges on *.* to 계정명@'localhost'|'%';
mysql > flush privileges;

원격지 백업인 경우 bind 해제

vi /etc/my.cnf.d/mariadb-server.cnf
===
bind-address=0.0.0.0 
# 주석 해제 후 0.0.0.0으로 변경
# 127.0.0.1로 되어 있는 경우 그냥 주석 처리 해도 됨
===

백업 스크립트 생성

#!/bin/bash

# 날짜 선언
# 일반 날짜: 실행 날짜 기록용
date=$(date '+%Y-%m-%d %H:%M:%S')
# 단순 날짜: 파일 구분 용
justdate=$(date '+%Y-%m-%d')

# 백업 경로 선언
backupdir="/backup/${justdate}"
# 로그 선언
log="/backup/logs/${justdate}.log"

# 디렉터리 미생성 에러 방지
mkdir -p /backup/${justdate}
mkdir -p /backup/logs

# 프로세스 체크 함수
function PSCHK() {
    CHK=$1
    if [ $CHK -eq 0 ]; then
        echo "SUCCESS" >> $log
    else
        echo "FAIL" >> $log
    fi
}

# DB 접속정보 선언
db_user="계정명"
db_pass="패스워드"
db_host="접속 호스트"

# 삭제 구문
find /backup/* -daystart -mtime +10 -exec rm -f {} \;

# 백업 전 확인 구문
#mysqlshow -h host -u user -p password 2>/dev/null | egrep -v "(Databases|\+)" | awk '{print $2}'
#mysqlshow -uroot -p
#mysqlshow -uroot -p | egrep -v "(Databases|\+)"
#mysqlshow -uroot -p | egrep -v "(Databases|\+)" | awk '{ print $2 }'
#mysqlshow -h ${db_host} -u${db_user} -p${db_pass} | egrep -v "(Databases|\+)" | awk '{ print $2 }'

dblist=$(mysqlshow -h ${db_host} -u${db_user} -p${db_pass} | egrep -v "(Databases|\+)" | awk '{ print $2 }')

dump="mysqldump -h ${db_host} -u${db_user} -p${db_pass}"

# not dump db list
not_dump_db="test1|test2"

# 실제 백업 구문
for dump_list in $dblist; do

        if [[ $dump_list =~ $not_dump_db ]]; then
                echo "skip $dump_list" >> $log
                continue
        fi

        echo "[${date}] ${dump_list} backup process" >> $log
        ${dump} --skip-lock-tables $dump_list > ${backupdir}/${dump_list}-${justdate}.sql
        CHK=`echo $?`
        PSCHK $CHK
done
profile
Raiju Hantu Goryo Obake
post-custom-banner

0개의 댓글