目次
MySQLのテーブル破損をチェックするスクリプト。
check tableコマンドを使用するため、DBエンジンがInnoDBもしくはMyISAMである必要がある。
以下の環境にて動作試験済み。
| 環境 | バージョン | 備考 |
| OS | CentOS 5.3 | |
| MySQL | MySQL 5.1 | /usr/local/mysql配下にインストール |
テーブルのリストファイルを読み込み、テーブルの破損状況をチェックするスクリプト。
リストファイルはコード内で変数定義されているファイルか、実行時の第一引数にて指定する。テーブルが格納されているデータベースの指定も同様に変数か第二引数にて指定する。
./mysql-tablecheck.sh
./mysql-tablecheck.sh table-list.txt mysql
チェック結果は以下のログファイルに出力される。
/home/system/logs/mysql-tablecheck_YYYYMM.log
ログファイルの生成時に以下のシンボリックリンクを自動的に生成するため、ログファイルを監視する場合にはこのシンボリックリンクを参照する。
/home/system/logs/mysql-tablecheck.log
コード内の変数を変更することで、引数指定なしでの実行と、ログファイル出力先を変えることが出来る。
| 変数名 | 例 | 機能 |
| TABLELIST | table-list.txt | チェック対象のテーブルリストファイル |
| MYSQLUSER | mysql | MySQLの接続用アカウント |
| MYSQLPASS | mysql | 上記パスワード |
| DBNAME | mysql | テーブルが格納されているデータベース名 |
| LOGPATH | /home/system/logs | ログファイルの保存先 |
#!/bin/sh
# ------------------------
# MySQL Table Check Script
# ------------------------
# Version : 1.1
# date : 2009/12/25
export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/local/mysql/bin:$PATH
export LD_LIBRARY_PATH=:/usr/local/mysql/lib/mysql
## Setting
TABLELIST="[TABLELIST]"
MYSQLUSER="[MYSQL USER]"
MYSQLPASS="[MYSQL PASSWORD]"
DBNAME="[DATABASE NAME]"
## LogFile
MDATE=`date +%Y%m`
LOGPATH="[LOG File PATH]"
LOGFILE=$LOGPATH"/mysql-tablecheck_"$MDATE".log"
## LogFile Setting
if [ -d $LOGPATH ];then
rm -f $LOGPATH"/mysql-tablecheck.log"
ln -s $LOGFILE $LOGPATH"/mysql-tablecheck.log"
else
echo $LOGPATH" not found"
exit 1
fi
## Perm Set
if [ -z $1 ]; then
if [ -r $TABLELIST ];then
LIST=$TABLELIST
else
echo $TABLELIST" not found"
exit 1
fi
else
if [ -r $1 ];then
LIST=$1
else
echo $1" not found"
exit 1
fi
fi
if [ -f $LIST ]; then
TABLENAME=`cat $LIST | awk '{printf "%s, ",$1}END{print ";"}' | sed "s/. \;/ \;/g"`
else
exit 1
fi
if [ -z $2 ]; then
DB=$DBNAME
else
DB=$2
fi
## DEBUG
echo "use $DB; check table $TABLENAME"
## Exec
echo "------------------------------" >> $LOGFILE
date +%Y/%m/%d" "%H:%M:%S >> $LOGFILE
echo "------------------------------" >> $LOGFILE
echo "use $DB; check table $TABLENAME" |mysql -u $MYSQLUSER --password=$MYSQLPASS >> $LOGFILE
echo "------------------------------" >> $LOGFILE
date +%Y/%m/%d" "%H:%M:%S >> $LOGFILE
echo "------------------------------" >> $LOGFILE
echo "END" >> $LOGFILE
# EOF