MySQL checksum tables 비교 쉘스크립트
DB Replication 이 잘 되고 있는지 Master 와 Slave의 테이블 체크섬으로 비교하는 shell script 입니다.
리플리케이션을 하더라도 sysdate 처럼 서버 종속적인 데이터는 값이 다르게 들어가니깐 이점 유의해서 감안하셔야 합니다.
동일하게 행단위로 들어가면 참 좋을텐데 아쉽군요.
그리고 마스터가 mysql 이고 슬래이브가 mariadb 라면 null 값인 경우 check sum 값이 다르게 나옵니다.
#!/bin/sh
M_DB_HOST="example.com"
M_DB_USER="root"
M_DB_PASS="비밀번호"
S_DB_HOST="localhost"
S_DB_USER="root"
S_DB_PASS="비밀번호"
M_DATABASES=(`mysql -h$M_DB_HOST -u$M_DB_USER -p$M_DB_PASS -e "show databases" | grep -v "Database\|information_schema\|mysql\|performance_schema"`)
DB_CNT=${#M_DATABASES[*]}
for ((i=0; i<$DB_CNT; i++)) ; do
DATABASE=${M_DATABASES[$i]}
TABLES=(`mysql -h$M_DB_HOST -u$M_DB_USER -p$M_DB_PASS -D$DATABASE -e "show tables" | grep -v "Tables_in_"`)
TB_CNT=${#TABLES[*]}
for ((j=0; j<$TB_CNT; j++)) ; do
TABLE=${TABLES[$j]}
M_CHECKSUMS=(`mysql -h$M_DB_HOST -u$M_DB_USER -p$M_DB_PASS -D$DATABASE -e "checksum tables $TABLE" | grep "$DATABASE." | awk -F " " '{print $1"-"$2}'`)
S_CHECKSUMS=(`mysql -h$S_DB_HOST -u$S_DB_USER -p$S_DB_PASS -D$DATABASE -e "checksum tables $TABLE" | grep "$DATABASE." | awk -F " " '{print $1"-"$2}'`)
CS_CNT=${#M_CHECKSUMS[*]}
for ((k=0; k<$CS_CNT; k++)) ; do
if [ "${M_CHECKSUMS[$k]}" != "${S_CHECKSUMS[$k]}" ] ; then
echo "${M_CHECKSUMS[$k]} != ${S_CHECKSUMS[$k]}"
#mysqldump -h$M_DB_HOST -u$M_DB_USER -p$M_DB_PASS $DATABASE $TABLE --opt | gzip > $DATABASE.$TABLE.$TODAY.sql.gz
#gunzip < $DATABASE.$TABLE.$TODAY.sql.gz | mysql -h$S_DB_HOST -u$S_DB_USER -p$S_DB_PASS $DATABASE
fi
done
done
done
위에서 마스터와 슬래이브의 호스트, 아이디, 비밀번호를 자신에 맞게 값을 넣으시면 됩니다.
echo 라인 아래 두줄은 테이블을 복사해주는 부분인데 필요하면 주석을 풀어주면 됩니다.
'LINUX' 카테고리의 다른 글
리눅스 쉘스크립트 문자열 치환 (0) | 2017.03.17 |
---|---|
리눅스 쉘스크립트 배열 비교 (0) | 2017.03.17 |
CentOS 6.x yum 에러 No module named yum (0) | 2017.03.15 |
리눅스 ssh 에서 백그라운드 실행방법 (0) | 2017.03.15 |
쉘스크립트 for 반복문 사용방법 (0) | 2017.03.15 |