ローカルテストのために私のシステムにMySQL DBをセットアップしました。変更がいつ行われたかを見るためにテーブルを監視しています。Bash - md5よりもファイルの変更を迅速に確認できますか?
ステップ1 - DIR
cd /usr/local/mysql-5.7.16-osx10.11-x86_64/data/blog_atom_tables/
ステップ2に行く - [スクリプトの実行watchDB()
が(少し読みやすくするために変更)され
watchDB
...
ディレクトリ内のすべてのテーブルファイルを通じてDRループ、各md5
のコピーを保存し、変更の確認をループし続ける; 10
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。
どのような行/列が変更されたかを知る必要はなく、テーブル自体が異なるだけです。ほとんどの場合、これは私が望むように正確に動作しますが、すべてのテーブルに対してmd5
を計算するのにはかなりの時間がかかります。たった25テーブルの場合、各ループを実行するのに3〜5秒かかります。
md5
以外の方法が簡単ですか?私はcmp
のようなものを使用したいと思いますが、ファイルの現在の状態の参照を保存する必要があります。
これは最終的にそこに入るテーブルの約1/6に過ぎないので、スピードの改善は歓迎されます。
ファイルシステムのマウント時に 'atime'が無効にされていない限り、ファイルアクセス/変更時刻を監視してみてはいかがですか? –
@Birrelすべてのファイルにはそれがあります。 – 123
@Birrelなぜテーブルを変更するためにmysqlを使用してください... – 123