mysql维护脚本_mysql日常维护优化脚本

如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR,

BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE

TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE

TABLE来重新利用未使用的空间,并整理数据文件的碎片。

在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。

OPTIMIZE TABLE只对MyISAM,

BDB和InnoDB表起作用。

对于InnoDB表,OPTIMIZE

TABLE被映射到ALTER TABLE上,这会重建表。重建操作能更新索引统计数据并释放成簇索引中的未使用的空间。

注意,在OPTIMIZE TABLE运行过程中,MySQL会锁定表。

OPTIMIZE TABLE语句被写入到二进制日志中,除非使用了自选的NO_WRITE_TO_BINLOG关键词(或其别名LOCAL)。已经这么做了,因此,用于MySQL服务器的OPTIMIZE

TABLE命令的作用相当于一个复制主服务器,在默认情况下,这些命令将被复制到复制从属服务器中。

废话少说,脚本如下:

#!/bin/bash

#this program is used to optimize of innodb

# History:

#         2007/11/28        chentao        1.1

#---------------------------------------------------------------

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

time_log=/usr/local/crontab/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/local/mysql/bin/mysql $i -uroot -p123456 -e "show tables" | grep -v "Tables" > /usr/local/crontab/$i)

tablelist=$(cat /usr/local/crontab/$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/local/mysql/bin/mysql $i -uroot -p123456 -e "optimize table $list"

done

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

echo >> $time_log

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值