天天看點

檢測mysql表的shell腳本

此腳本的主要用途是檢測mysql伺服器上所有的db或者單獨db中的壞表。

檢測完後會在/tmp 目錄下生成日志檔案。

檢測指定資料庫的效果圖如下:

<a href="http://blog.51cto.com/attachment/201302/161803254.png" target="_blank"></a>

檢查所有資料庫:

<a href="http://blog.51cto.com/attachment/201302/161714598.png" target="_blank"></a>

#!/bin/bash 

#此腳本的主要用途是檢測mysql伺服器上所有的db或者單獨db中的壞表 

#變量說明 pass mysql賬戶密碼 name mysql賬号名稱 data_path mysql目錄路徑 directory_list 目錄清單 file_list檔案清單 db_name 資料庫名稱 repair_count單庫中待修複的表總數 

#變量說明 repair_count_all所有庫中待修複的表總數 mysql_version mysql版本 _file_name 資料表名稱 

echo -e "此腳本的主要用途是檢測mysql伺服器上所有的db或者單獨db中的壞表\n\n" 

pass=123456 

name=root 

read -p "輸入mysql存儲路徑: "  choose 

data_path=$choose 

unset choose 

read -p "請輸入mysql指令路徑: " mysql_version 

#标準輸入、标準輸出、标準錯誤輸出的檔案标示符 由 0、1、2辨別  

read -p "請選擇是檢查伺服器上所有資料庫還是指定的資料庫 1:檢查全部資料庫 2:隻檢查指定資料庫: " 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 "目前檢查資料庫為:"${directory_list} 

              for file_list in $(ls *.frm) 

              do 

                _file_name=${file_list%.frm} 

                echo -e "\n" &gt;&gt; /tmp/check_table_all.log 

                ${mysql_version} -h 127.0.0.1 -u${name} -p${pass} -e "check table "${directory_list}.${_file_name} 2&gt;&amp;1 &gt;&gt; /tmp/check_table_all.log  

              done 

              cd .. 

          fi 

      fi 

  done 

             cat /tmp/check_table_all.log | grep "Table is marked as crashed" &gt; /tmp/check_table_repair.log 

             repair_count_all=` awk 'END{print NR}' /tmp/check_table_repair.log ` 

             echo -e "所有資料庫用有${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) 

      _file_name=${file_list%.frm} 

      echo -e "\n" &gt;&gt; /tmp/check_${db_name}.log 

      ${mysql_version} -h 127.0.0.1 -u${name} -p${pass} -e "check table "${db_name}.$_file_name 2&gt;&amp;1 &gt;&gt; /tmp/check_${db_name}.log 

    done 

    cat /tmp/check_${db_name}.log | grep "Table is marked as crashed" &gt; /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 

本文轉自1594cqb 51CTO部落格,原文連結:http://blog.51cto.com/wolfchen/1133919,如需轉載請自行聯系原作者