본문 바로가기

Database

DB 반영 자동화 스크립트

스키마 구조가 같은 여러개의 DB를 운영하는 환경에서

DB 스키마 구조 변경시 일일이 변경할 수 없기에 아래와 같은 스크립트를 실행하여 변경사항을 

모든 DB에 반영한다.

 

path 구조

/cnf/mysql.cnf  # mysql.cnf 설정값 가지고 있음(계정.패스워드)
/log  # 스크립트 실행시 로그 남김
/script # 실제 실행할 쿼리스크립트 보관경로
./db_host.txt  # DB host list
./db_script.sh # shell script 

 

mysql.cnf

[mysql]
default-character-set = utf8mb4
user = 계정
password = "패스워드"

 

shell script

#!/bin/bash

LOG_FILE_NM=db_script_`date +"%Y%m%d"`.log
FILE_SAVE_PATH=./log
FILE_DIRECTORY=`date +"%Y%m%d"`
MYSQL_PORT='포트'
MYSQL_CNF=./cnf/mysql.cnf
SCRIPT=./script/스크립트명.sql

# create backup directory
mkdir -p ${FILE_SAVE_PATH}/${FILE_DIRECTORY}

for MYSQL_HOST in $(cat ./db_host.txt);
do
        echo `date +"%Y-%m-%d %H:%M:%S"`" <<<"$MYSQL_HOST" "$SCRIPT" shell script start!>>>" >> ${FILE_SAVE_PATH}/${FILE_DIRECTORY}/${LOG_FILE_NM}
        mysql --defaults-extra-file=$MYSQL_CNF -h ${MYSQL_HOST} -P $MYSQL_PORT < $SCRIPT >> ${FILE_SAVE_PATH}/${FILE_DIRECTORY}/${LOG_FILE_NM} 2>&1
        echo `date +"%Y-%m-%d %H:%M:%S"`" <<<"$MYSQL_HOST" "$SCRIPT" shell script end!>>>" >> ${FILE_SAVE_PATH}/${FILE_DIRECTORY}/${LOG_FILE_NM}
		    echo "" >> ${FILE_SAVE_PATH}/${FILE_DIRECTORY}/${LOG_FILE_NM}
done

 

고찰.

더 괜찮코 까리한 방법없을까