公司最近的MySQL總是大量的鎖表,分析了一下,基本上都是用的MYISAM表引擎,MYISAM在一張表里大量的讀寫會造成MySQL整張表都鎖死,而造成動態(tài)內容不能及時讀數(shù)據(jù),給用戶體驗帶來巨大的影響。INNODB的工作原理只是鎖表的單行記錄(行鎖),不會影響同一張表內的其他行記錄。與是寫下了以下SHELL腳本,可單個表和整數(shù)據(jù)庫的引擎轉換...
#!/bin/sh
-
# Arg1 : -d dbname
# Arg2 : -t [tables]
# Arg3 : -e engine type (myisam | innodb)
User="root"
Pwd="666666"
MYSQLbin="/usr/local/mysql/bin/mysql -u$User -p$Pwd -e"
TmpFile='/tmp/table.tmp'
Usage()
{
echo "Usage():$0 -d dbname [-t tbname] -e engine( myisam | innodb )"
}
if [ $# -eq 0 ];then
Usage
exit 1
fi
while getopts d:t:e:h OPTION
do
case $OPTION in
d)
{
DBName=$OPTARG
DBExists=`$MYSQLbin "show databases;"|grep "$DBName"`
if [ "$DBExists" == "" ];then
echo "$DBName database not exists!"
exit 1
fi
};;
t)
{
TBName=$OPTARG
TBExists=`$MYSQLbin "use $DBName;show tables"|grep $TBName`
if [ "$TBExists" == "" ];then
echo "$TBName table not exists!"
exit 1
fi
};;
e)
{
EngineName=`echo $OPTARG|tr A-Z a-z`
if [ "$EngineName" != "myisam" ] && [ "$EngineName" != "innodb" ];then
Usage
echo "Engine $EngineName is no exists!"
exit 1
fi
};;
?|h)
Usage
exit 0
;;
esac
done
if [ "$EngineName" == "" ];then
Usage
echo "Lose '-e (innodb | myisam)'!"
exit 1
fi
if [ "$TBName" != "" ];then
CurrentEngine=`$MYSQLbin "use $DBName;show table status like '$TBName'\G"|grep Engine|awk '{print $2}'|tr A-Z a-z`
if [ "$CurrentEngine" == "$EngineName" ];then
echo -e "\033[31m Current Table $TBName is already of type $EngineName;Ignored! \033[0m"
exit 0
fi
$MYSQLbin "use $DBName;alter table $TBName engine=$EngineName"
else
$MYSQLbin "use $DBName;show tables"|sed 1d > $TmpFile
while read Table
do
CurrentEngine=`$MYSQLbin "use $DBName;show table status like '$Table'\G"|grep Engine|awk '{print $2}'|tr A-Z a-z`
if [ "$CurrentEngine" == "$EngineName" ];then
echo -e "\033[31m Current Table $Table is already of type $EngineName;Ignored! \033[0m"
else
$MYSQLbin "use $DBName;alter table $Table engine=$EngineName;"
echo -e "\033[32m $DBName Table $Table Convert $EngineName is Sucessfull! \033[0m"
# continue
fi
done < $TmpFile
fi 本文出自:億恩科技【1tcdy.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|