목표 : 백업 제외시킬 Dabatase 명 목록을 생성하고 DB 서버에서 Database 명 목록을 조회하고 제외 목록이 아닐 경우 백업을 진행하도록 설정함.
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
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
mysql> create database test1;
mysql> create database test2;
# 원격지 백업인 경우
mysql> create user 계정명@'%' identified by '비밀번호';
# 로컬 백업인 경우
mysql> create user 계정명@'localhost' identified by '비밀번호';
# 권한 부여
mysql > grant all privileges on *.* to 계정명@'localhost'|'%';
mysql > flush privileges;
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