2017-11-02 4 views
-1

로컬 테스트를 위해 시스템에 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에 불과하므로 속도 향상을 환영합니다.

+0

파일 시스템을 마운트 할 때'atime'을 사용할 수 없으면 파일 액세스/수정 시간을 모니터하지 않으시겠습니까? –

+0

@Birrel 모든 파일에 있습니다. – 123

+0

@Birrel 왜 테이블을 변경 쿼리 mysql을 사용하지 마십시오 ... – 123

답변

1

실제로 파일의 내용을 확인하지는 않지만 파일 시스템 속성을 사용하여 변경 사항을 모니터링하는 간단한 방법으로 사용할 수 있습니다. 파일 시스템이 비활성화 타임 스탬프를 장착하지 않는 한, 당신은 액세스 시간과 수정 시간의 타임 스탬프를 모니터링 할 수 있습니다 읽기 및 발생 쓰고 이후에 타임 스탬프를 업데이트 할 때

stat -f "%m" <filename> 

파일 시스템 드라이버가 알고있다.