检查mysql数据库是否存在坏表脚本
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 echo -e "此脚本的主要用途是检测mysql服务器上所有的数据库或者单独数据库中的坏表\n\n" 6 pass=123456 7 name=root 8 read -p "输入mysql存储路径: " choose 9 data_path=$choose 10 unset choose 11 read -p "请输入mysql命令路径: " mysql_version 12 #标准输入、标准输出、标准错误输出的文件标示符 由 0、1、2标识 13 read -p "请选择是检查服务器上所有数据库还是指定的数据库 1:检查全部数据库 2:只检查指定数据库: " choose 14 if[ $choose ==1];then 15 cd $data_path 16 for directory_list in $(ls) 17 do 18 if[-d $directory_list ];then 19 if["mysql"!="${directory_list}"-a "test"!="${directory_list}"];then 20 cd ${directory_list} 21 echo "当前检查数据库为:"${directory_list} 22 for file_list in $(ls *.frm) 23 do 24 _file_name=${file_list%.frm} 25 echo -e "\n">>/tmp/check_table_all.log 26 ${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 27 done 28 cd .. 29 fi 30 fi 31 done 32 cat /tmp/check_table_all.log | grep "Table is marked as crashed">/tmp/check_table_repair.log 33 repair_count_all=` awk 'END{print NR}' /tmp/check_table_repair.log ` 34 echo -e "所有数据库用有${repair_count_all}张表需要修复!" 35 more /tmp/check_table_repair.log 36 else 37 read -p "请输入要检查的数据库名称: " db_name 38 cd ${data_path}/${db_name} 39 for file_list in $(ls *.frm) 40 do 41 _file_name=${file_list%.frm} 42 echo -e "\n">>/tmp/check_${db_name}.log 43 ${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 44 done 45 cat /tmp/check_${db_name}.log | grep "Table is marked as crashed">/tmp/check_${db_name}_Repair.log 46 repair_count=`awk 'END{print NR}' /tmp/check_${db_name}_Repair.log` 47 echo -e "${db_name}中共有${repair_count}个表需要修复!\n " 48 more /tmp/check_${db_name}_Repair.log 49 fi