大規模WordPress構築・運用時のトラブル MySQL データベース設定
CMSソフトウェアのWordpressを利用して、マルチサイトを構築・運用する際に設定しておくと良い事の特集です。
Wordpressのバージョンが3になったころ、標準でマルチサイトの対応が行われました。
※対応したと言っても手動でオプションを設置ファイルに追加しないといけません。
(3以前のバージョンではプラグインを利用していました)
マルチサイト便利ですね。
それまでは、サイト毎にWordpressをインストール・構築しなければならず、プラグインの導入やバージョンアップなど、サイトが増える毎に管理するのが大変になっていました。
マルチサイトに対応させることで、それらの負担がほぼ無くなりました。
ただし、デメリットとしては、同一サーバー内にまとめることから、サーバーダウン、Wordpressのセキュリティーホールなど、メリットも共有できる反面、デメリットまでちゃんと共有してくれます。
弊社でも数年前から、Wordpressの環境をご提供しており、現在では10000サイト以上が一つのWordpresss上でマルチサイトとして公開されています。
それらの運用で感じた事をまとめていきたいと思います。
10000以上のサイトにもなると、テーブルの数はざっと10万以上になると思います。
Wordpressはサイト毎に、wp_ブログ番号_xxxxxxのようにテーブルを分けて管理しています。
(将来的にテーブルを分けるのか?または、同じテーブルでカラムで管理して分けるのか?選択する仕様に対応してほしいですね)
毎日ガンガン更新しているようなサイトは別にして、コーポレートサイトの場合などはページデータもそんなに増えないので、同じテーブルで管理できたら保守が簡単になりそうです。
今回は、MySQLで大量のテーブルがあるデータベースを管理する際に、設定した方が良いオプションです。
コンソール上から、mysqlサーバーに接続して
対象となるWordpresssのデータベースを指定する際に
use wordpressdb;
と、すると、下記のメーッセージが表示されて、そのまましばらく固まってしまいます。
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
(テーブル情報、カラム情報を取得しているけど、この処理を早くしたいなら -Aオプションを使いなさいって感じでメッセージがでます。)
そりゃ、10万のテーブルファイルを参照していたら遅いやろ・・・
そこで、-Aを付けてmysqlに再接続してみると
mysql -A -ruser -p
あらら、今度はいつもどおり直ぐにレスポンスが帰ってきました。
そのままSQLを発行しても、直ぐに動作してくれます。
-A = no-auto-rehash
テーブル名とカラム名の補完をしない設定になります。
設定ファイルに追加する場合は下記のようになります。
vi /etc/my.cnf
[mysql]
no-auto-rehash
これらのオプションを知らずに管理すると、無駄な時間を過ごすはめになるので、覚えておきたいことですね。