ddcp 환경 innodb 구조 mysql 데이터베이스 테이블 이상 재구성 필요

1667 단어 mysqllinuxshellwdcp
ddcp 환경 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

좋은 웹페이지 즐겨찾기