wdcp環境innodb結構mysql資料庫表異常需要重建

guntm124發表於2018-07-19

wdcp環境innodb結構mysql資料庫表異常需要重建

mysql資料庫因innodb異常無法正常啟動或者無法讀取表時,

先用修復模式啟動匯出備份mysql,然後重建innodb,再匯入資料

#!/bin/bash
dbuser='root'
dbpass='******'
mysqldata='/home/wddataar'
mycnf='/www/wdlinux/etc/my.cnf'
mysql_e='/www/wdlinux/mysql/bin/mysql'
mysqldump_e='/www/wdlinux/mysql/bin/mysqldump'
mysqlbakpath="/home/bkmysql/$(date +%Y%m%d%H%M%S)"
function stop_mysql(){
    service mysqld stop
    if [ $? -ne 0 ];then
    ps -e|grep mysql|awk '{print $1}'|xargs kill -9
    fi
}
mkdir -p $mysqlbakpath
sed -i -e '/\[mysqld\]/a innodb_force_recovery=3' $mycnf
stop_mysql
service mysqld start
#start dump innodb mysql
if [ $? -eq 0 ];then
    cd $mysqldata
    ls *\/*.ibd -h|awk -F'/' '{print $1}'|uniq|grep -v 'mysql' > $mysqlbakpath/l.txt
    for i in `cat $mysqlbakpath/l.txt`
    do
        echo "dump $i"
        $mysqldump_e -f -u$dbuser -p$dbpass $i > $mysqlbakpath/$i.sql
    done
fi
#end dump innodb mysql
#start bkup innodb mysql
cd $mysqldata
stop_mysql
mv -f ibdata1 ib_logfile0 ib_logfile1 $mysqlbakpath
for i in `cat $mysqlbakpath/l.txt`
do
    mv -f $i $mysqlbakpath
done
#end bkup innodb mysql
sed -i -e '/innodb_force_recovery=3/d' $mycnf
service mysqld start
#start Import mysql
if [ $? -eq 0 ];then
    for i in `cat $mysqlbakpath/l.txt`
    do
        echo "recovey $i"
        $mysql_e -u$dbuser -p$dbpass -e "create database $i;"
        $mysql_e -u$dbuser -p$dbpass $i < $mysqlbakpath/$i.sql
    done
fi
#end Import mysql

 

相關文章