mysqlcheckでDBのテーブルを最適化する

MySQLをMyISAMで利用しているとテーブルのオーバーヘッドが発生します。
phpMyAdminを使えばブラウザ上から最適化を行うこともできますが、スクリプトを使って定期的に実行してみようと思います。

スクリプト組み立て

スクリプトはmysqlcheckと最適化オプション「-o」を使用し、最適化するDBを指定します。

■mysqlopti.sh

#!/bin/bash

## 変数に値を設定
HOSTNAME=********
SQLUSER=YYYYYYY
SQLPASSWD=ZZZZZZ
MYSQLDB=DBname

#mysql オーバーヘッド最適化
/usr/bin/mysqlcheck -o -r -u${SQLUSER} -p${SQLPASSWD} ${MYSQLDB}

exit

スクリプト実行

chmodで実行権限を付与した後、まずは手動でスクリプトを実行してみます。

# ./mysqlcheck.sh 
DBname_commentmeta                          OK
DBname_comments                             OK
DBname_links                                OK
DBname_options                              OK
DBname_postmeta                             OK
DBname_posts                                OK
DBname_term_relationships                   OK
DBname_term_taxonomy                        OK
DBname_terms                                OK
DBname_usermeta                             OK
DBname_users                                OK

cronにスクリプトを登録

後は「ln -s」で日次(/etc/cron.daily)か週次(/etc/cron.weekly)にシンボリックリンクを作成します。日時の場合はDBバックアップの後に処理をするようにファイル名を調整します。