mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

MySQL - オーバーヘッドの最適化!

[ サーバ構築 ] [ MySQL, ScientificLinux ]

こんばんは。

WordPressをしばらく使用していると、時々MySQLが原因で動作が重くなることがあります。 その主な原因は、DBへのINSERTやDELETEが頻繁に行われることによるフラグメンテーションの増加です。 今日はその解決方法についてです。

解決方法

その1.phpMyAdminによるテーブル最適化

過去記事「MySQL − オーバーヘッドの削除!」を参照。

その2.SQL文による最適化

MySQLサーバにログイン後、以下のコマンドを実行する。 (参照 → MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.2.5 OPTIMIZE TABLE 構文

1
OPTIMIZE TABLE wp_options;

※上記はwordpressデータベースのwp_optionsテーブルの例です。 ※この方法はストレージエンジン「MyISAM」、「InnoDB」のテーブルに有効です。

その3.コマンドラインからの最適化

シェルコマンドラインで以下のコマンドを実行する。 (参照 → MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.11 mysqlcheck - テーブル メンテナンスと修復プログラム

1
mysqlcheck -o -r -u root -phogehoge wordpress

※上記はMySQLサーバにrootでログインし、wordpressデータベースの全テーブルを最適化・修復する例です。 ※この方法はストレージエンジン「MyISAM」のテーブルに有効です。「InnoDB」のDBには無効です。


思いつくのは以上3つの方法です。

当方は、以前はphpMyAdminで閲覧したついでに上記の「その1」の方法で最適化していましたが、最近は毎日cronによる自動化処理にしています。

自動化処理

上記の「その3」の処理を自動化します。 以下の処理はScientificLinux6.1サーバにおける処理です。お使いの環境によっては適宜読み替えてくさい。

1.実行シェル作成

ルートに「mysql-optimize.sh」というファイルを以下の内容で作成します。

1
2
#!/bin/bash
mysqlcheck -o -r -u root -phogehoge wordpress

2.実行シェルに実行権限

作成した「mysql-optimize.sh」に実行権限を与える。

1
# chmod 700 mysql-optimize.sh

3.cron設定

「mysql-optimize.sh」を定期実行するためにcron登録します。 「/etc/cron.d」ディレクトリに「mysql-optimize」というファイルを以下の内容で作成します。

1
0 2 * * * root /root/mysql-optimize.sh > /dev/null

※上記は毎日午前2時にroot権限でルートの「mysql-optimize.sh」を実行し、エラーがあったらroot宛にメール通知する例です。


以上です。

Comments