mysqlデータベースにテーブルがクラッシュするかどうか検査

このシェルの主な用途はmysqlサーバーの上ですべてのデータベースあるいは単独のデータベースのテーブルが壊れるかどうか測定
OS:RHEL/Centos

ファイル名:check_mysql.sh
#!/bin/bash
#このシェルはmysqlのすべてのdbまた単独dbのテーブルが壊れるかどうか検査
#パラメータ説明 pass mysqlのアカウント情報name mysqlのディレクトリパス-directory_list ディレクトリリスト-file_list
#データベース名repair_countは単独DBの未修復総計数
#repair_count_allはすべての用修復のテーブル総計 mysql_versionはmysqlバージョン _file_nameはテーブル名前

echo -e “このシェルはmysqlサーバーのすべてのテーブルのチェック作業を行う\n\n"
pass=XXX
name=XXX

read -p “mysql保存パスを入力してください: " choose
data_path=$choose
unset choose

read -p “mysql保存パスを入力してください: " mysql_version
#標準入力、標準輸出、標準エラー輸出ファイルの標示 0,1,2で標示
read -p " サーバーのすべてのDBまた特定なDBを選んでください 1:すべてのDB 2:特定なDB: " choose

if [ $choose == 1 ]; then
cd $data_path
for directory_list in $(ls)
do
if [ -d $directory_list ];then
if [ “mysql" != “${directory_list}" -a “test" != “${directory_list}" ];then
cd ${directory_list}
echo “現在のDB:"${directory_list}
for file_list in $(ls *.frm)
do
_file_name=${file_list%.frm}
echo -e “\n" >> /tmp/check_table_all.log
${mysql_version} -h 127.0.0.1 -u${name} -p${pass} -e “check table “${directory_list}.${_file_name} 2>&1 >> /tmp/check_table_all.log
done
cd ..
fi
fi
done
cat /tmp/check_table_all.log | grep “Table is marked as crashed" > /tmp/check_table_repair.log
repair_count_all=` awk 'END{print NR}’ /tmp/check_table_repair.log `
echo -e “全部DBは${repair_count_all}テーブルの修復が必要!"
more /tmp/check_table_repair.log
else
read -p “検査するデータベースの名前を入力してください: " db_name
cd ${data_path}/${db_name}
for file_list in $(ls *.frm)
do
_file_name=${file_list%.frm}
echo -e “\n" >> /tmp/check_${db_name}.log
${mysql_version} -h 127.0.0.1 -u${name} -p${pass} -e “check table “${db_name}.$_file_name 2>&1 >> /tmp/check_${db_name}.log
done
cat /tmp/check_${db_name}.log | grep “Table is marked as crashed" > /tmp/check_${db_name}_Repair.log
repair_count=`awk 'END{print NR}’ /tmp/check_${db_name}_Repair.log`
echo -e “${db_name}の中で${repair_count}個テーブルの修復が必要です!\n "
more /tmp/check_${db_name}_Repair.log
fi

IT

Posted by arkgame