开源的关系型数据库mysql在实际生产环境中大量被使用,但是长期以往的使用肯定会因为一些外在的因素导致表损坏,还有经过大量的增删改查数据后一定会有很多的磁盘空间没有被回收那么,平时就可以使用mysql下的mysqlcheck脚本工具进行定期修复

#!/bin/bash

export mysql_bin=/usr/local/mysql/bin/
export logs_dir=/data/backup/mysql_backup/optimize_logs/
export datetime=`date +"%Y%m%d"`

if [ ! -e "$logs_dir" ];then
                mkdir -p $logs_dir
fi

echo "`date` start optimize" | tee -a $logs_dir/optimize-${datetime}.log

$mysql_bin/mysqlcheck -Ao --auto-repair -uroot
$mysql_bin/mysql -Bse "flush query cache;"
#flush查询缓存,清理内存碎片

if [ $? -eq 0  ]
       then
               echo "`date` optimize success" | tee -a $logs_dir/optimize-${datetime}.log
       else
               echo "`date` optimize fail" | tee -a $logs_dir/optimize-${datetime}.log
fi

find $logs_dir -type f -ctime +30 -name "optimize*" -exec rm -vf {} \;

通过crontab做定时,一般一个月一次就够了,不宜过频繁

00 00 1 * * /usr/local/scripts/optimize.sh