wdcp环境innodb结构mysql数据库表异常需要重建

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

 

你可能感兴趣的:(mysql,linux,shell,wdcp)