로컬 테스트를 위해 시스템에 MySQL DB가 설치되어 있으며 테이블을 모니터링하여 변경시기를 확인합니다.Bash - md5보다 파일 변경을 빠르게 검사 할 수 있습니까?
1 단계 - 2 단계
cd /usr/local/mysql-5.7.16-osx10.11-x86_64/data/blog_atom_tables/
DIR로 이동 - watchDB()
이 (약간 읽기 쉽도록 수정)되어
watchDB
...
스크립트 실행을function watchDB() {
declare -A aa // Associative array of filenames and their md5 hashes
declare k // Holder for current md5
prt="0"
while true; do // Run forever
// Loop through all table files within directory
for i in *.ibd;
do
k=$(sudo md5 -q $i) // md5 of file (table)
// If table has not been hashed yet
if [[ ${aa[$(echo $i | cut -f 1 -d '.')]} == "" ]]; then
aa[$(echo $i | cut -f 1 -d '.')]=$k
// If table has been hashed, and diff md5 (i.e. table changed)
elif [[ ${aa[$(echo $i | cut -f 1 -d '.')]} != $k ]]; then
echo $i;
aa[$(echo $i | cut -f 1 -d '.')]=$k
fi
done
done
}
TL, 디렉토리 내의 모든 테이블 파일을 통해 DR 루프, 각 md5
의 사본을 저장하고, 변화에 대한 검사를 통해 루핑 계속합니다.
어떤 행/열이 변경되었는지는 알 필요가 없으며 테이블 자체 만 다릅니다. 대부분의 경우이 방법은 원하는대로 작동하지만 모든 테이블에 대해 md5
을 계산하는 데는 상당한 시간이 걸립니다. 단지 25 개의 테이블에 대해서, 각 루프를 실행하는 데 3 ~ 5 초가 걸립니다.
md5
이외의 더 빠른 방법이 있습니까? 나는 cmp
과 같은 것을 사용할 것이지만 파일의 현재 상태에 대한 참조를 저장해야하므로 비교할 대상이 있습니다.
이것은 전체 테이블의 약 1/6에 불과하므로 속도 향상을 환영합니다.
파일 시스템을 마운트 할 때'atime'을 사용할 수 없으면 파일 액세스/수정 시간을 모니터하지 않으시겠습니까? –
@Birrel 모든 파일에 있습니다. – 123
@Birrel 왜 테이블을 변경 쿼리 mysql을 사용하지 마십시오 ... – 123