Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # find-corrupt-mysql-table.sh
- # Check corrupt table @ MySQL
- # InnoDB tables sometime does not show up as errors with mysqlcheck,
- # yet when you try to SELECT, it will give message :
- # ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query
- # This script will check every available table & find all with such problem
- # one-liner version
- ###rm result.txt ; databases=( `mysql -e "show databases"` ) ; for d in "${databases[@]}" ; do tables=( `mysql -e "use $d ; show tables"` ) ; for t in "${tables[@]}" ; do printf "\n DATABASE: $d ; TABLE: $t \n" >> result.txt ; if [[ "$d" == "information_"* ]] ; then sleep 0 ; else if mysql -e "select * from $d.$t limit 1" |& tee -a result.txt | grep -q "ERROR" ; then sleep 2 ; fi ; fi ; done ; done ;
- ##### START #####################
- omitted=information_
- # clean up
- rm result.txt
- databases=( `mysql -e "show databases"` )
- for d in "${databases[@]}"
- do
- tables=( `mysql -e "use $d ; show tables"` )
- for t in "${tables[@]}"
- do
- printf "\n DATABASE: $d ; TABLE: $t \n" >> result.txt
- if [[ "$d" == "$omitted"* ]] ; then
- # skip this database
- sleep 0
- else
- # get the output into result.txt, and also
- # to stdout, so we can grep / check it for error message
- if mysql -e "select * from $d.$t limit 1" |& tee -a result.txt | grep -q "ERROR" ; then
- # if we encountered a problematic table
- # we need to stop for a while
- # to give time to MySQL to recover
- # if we continue anyway, we won't be able to connect to MySQL
- sleep 2
- fi
- fi
- done
- done
Add Comment
Please, Sign In to add comment