檢測mysql表的shell腳本

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

檢測完後會在/tmp 目錄下生成日誌文件。

檢測指定數據庫的效果圖如下:

檢查所有數據庫:

  1. #!/bin/bash 
  2. #此腳本的主要用途是檢測mysql服務器上所有的db或者單獨db中的壞表 
  3. #變量說明 pass mysql賬戶口令 name mysql賬號名稱 data_path mysql目錄路徑 directory_list 目錄列表 file_list文件列表 db_name 數據庫名稱 repair_count單庫中待修復的表總數 
  4. #變量說明 repair_count_all所有庫中待修復的表總數 mysql_version mysql版本 _file_name 數據表名稱 
  5.  
  6. echo -e "此腳本的主要用途是檢測mysql服務器上所有的db或者單獨db中的壞表\n\n" 
  7. pass=123456 
  8. name=root 
  9.  
  10. read -p "輸入mysql存儲路徑: "  choose 
  11. data_path=$choose 
  12. unset choose 
  13.  
  14. read -p "請輸入mysql命令路徑: " mysql_version 
  15. #標準輸入、標準輸出、標準錯誤輸出的文件標示符 由 0、1、2標識  
  16. read -p "請選擇是檢查服務器上所有數據庫還是指定的數據庫 1:檢查全部數據庫 2:只檢查指定數據庫: " choose 
  17. if [ $choose == 1 ]; then 
  18.   cd $data_path 
  19.   for directory_list in $(ls) 
  20.     do 
  21.       if [ -d $directory_list ];then 
  22.           if [ "mysql" != "${directory_list}" -a "test" != "${directory_list}" ];then  
  23.               cd ${directory_list} 
  24.               echo "當前檢查數據庫爲:"${directory_list} 
  25.               for file_list in $(ls *.frm) 
  26.               do 
  27.                 _file_name=${file_list%.frm} 
  28.                 echo -e "\n" >> /tmp/check_table_all.log 
  29.                 ${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  
  30.               done 
  31.               cd .. 
  32.           fi 
  33.       fi 
  34.   done 
  35.              cat /tmp/check_table_all.log | grep "Table is marked as crashed" > /tmp/check_table_repair.log 
  36.              repair_count_all=` awk 'END{print NR}' /tmp/check_table_repair.log ` 
  37.              echo -e "所有數據庫用有${repair_count_all}張表需要修復!" 
  38.              more  /tmp/check_table_repair.log 
  39. else 
  40.   read -p "請輸入要檢查的數據庫名稱: " db_name 
  41.   cd ${data_path}/${db_name} 
  42.   for file_list in $(ls *.frm) 
  43.     do 
  44.       _file_name=${file_list%.frm} 
  45.       echo -e "\n" >> /tmp/check_${db_name}.log 
  46.       ${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 
  47.     done 
  48.     cat /tmp/check_${db_name}.log | grep "Table is marked as crashed" > /tmp/check_${db_name}_Repair.log     
  49.     repair_count=`awk 'END{print NR}' /tmp/check_${db_name}_Repair.log` 
  50.     echo -e "${db_name}中共有${repair_count}個表需要修復!\n " 
  51.     more /tmp/check_${db_name}_Repair.log                                  
  52. fi 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章