天天看點

優化mysql資料表的shell腳本

由于公司資料庫中的資料量較大,定期對公司的mysql資料庫中的資料表進行優化操作(關于optimize的描述如下所示),資料庫中有300多張資料表,手工去操作顯然不太現實,用腳本來執行效率還是很不錯的,腳本如下:

mysql手冊中關于 OPTIMIZE 的描述:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

如果您已經删除了表的一大部分,或者如果您已經對含有可變長度行的表(含有VARCHAR, BLOB或TEXT列的表)進行了很多更改,則應使用

OPTIMIZE TABLE。被删除的記錄被保持在連結清單中,後續的INSERT操作會重新使用舊的記錄位置。您可以使用OPTIMIZE TABLE來重新

利用未使用的空間,并整理資料檔案的碎片。

使用方法:sh optimize.sh word

[root@youxia194 shell]# cat optimize.sh 

#!/bin/sh

time_log=/opt/optimize_time

sum=$#

if [ "$sum" -eq 0 ]

then

    echo "Error: no parameter chosed"

exit 1

fi

for i in $*;do

        echo "optimize database $i starting ..."

        tables=$(/usr/bin/mysql $i -udevuser -pdevuser -e "show tables" | grep -v "Tables" > /opt/$i)

        tablelist=$(cat /opt/$i)

        echo "optimize database $i starting ................" >> $time_log

        echo "$i start at $(date  +[%Y/%m/%d/%H:%M:%S])" >> $time_log

for list in $tablelist

        do

                echo $list

                /usr/bin/mysql $i -utaobao -padmin -e "optimize table $list"

        done

echo "$i end   at $(date  +[%Y/%m/%d/%H:%M:%S])" >> $time_log

echo >> $time_log

done

本文轉自 trt2008 51CTO部落格,原文連結:http://blog.51cto.com/chlotte/544147,如需轉載請自行聯系原作者