自分がMySQLをインストールしたあとに行う設定を備忘録がてら書いてみます。サーバのスペックによって若干変動するところもありますが、チューニングする項目というのは大体こんなもんでしょう。
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
# ここまではわりとお決まりの設定。環境によってファイルのパスは適宜変えます。
# サーバ側で使用する文字コードの設定
default-character-set = utf8
# クライアント/サーバ側での文字コード変換を行わない
skip-character-set-client-handshake
# CREATE TABLE する際に ENGINE=InnoDB の指定をしなくてもInnoDBにする
default-table-type = InnoDB
# クライアント/サーバがやり取りすることのできるパケットサイズを指定
# 巨大なデータをやり取りする場合は指定した方がよい
max_allowed_packet = 16M
# MyISAMで使用するINDEXのキャッシュサイズ
key_buffer = 64M
# スレッドのスタック領域のサイズ
thread_stack = 128K
# 生成されたコネクション用のスレッドをキャッシュしておく数
thread_cache_size = 16
# 最大同時接続数。メモリ搭載量にもよるが100〜300ぐらいが良いらしい
max_connections = 150
# MyISAMで一度開いたテーブルをキャッシュしておく数
table_cache = 128
# 同時に実行できるスレッド数。CPUのコア数の2倍を設定
thread_concurrency = 2
# query cacheの設定
# 0: OFF, 1:ON, 2:DEMAND
query_cache_type = 1
# キャッシュするクエリ結果の最大サイズ
query_cache_limit = 1M
# クエリキャッシュに割り当てるメモリ量
query_cache_size = 16M
# slow logの設定
log_slow_queries = /var/log/mysql/mysql-slow.log
# 3秒以上かかったクエリは上記ログファイルに出力
long_query_time = 3
# ここからレプリケーションの設定
# MySQLサーバごとに固有のID
server-id = 1
# バイナリログ出力先
log_bin = /var/log/mysql/mysql-bin.log
# データ書き込み(トランザクションのコミット)を何回行ったらバイナリログを
# フラッシュするかの回数。0の場合はデータ書き込みがあってもバイナリログをフラッシュしない
sync_binlog = 0
# バイナリログを保持しておく日数
expire_logs_days = 60
# バイナリログの1ファイルあたりの最大サイズ
max_binlog_size = 1024M
# バイナリログを出力する対象のDB
binlog_do_db = hoge
# バイナリログの出力対象外とするDB
binlog_ignore_db = mysql information_schema
# Berkley DBは使わない
skip-bdb
# InnoDBのデータファイルの名前とどのぐらいで自動拡張するか
innodb_data_file_path = ibdata1:128M:autoextend
# テーブルごとに.ibdのデータファイルを作成するかどうか
innodb_file_per_table = 1
# InnoDBの内部データなどを保持するための領域
innodb_additional_mem_pool_size = 20M
# InnoDBのデータやインデックスをキャッシュするためのメモリ上の領域
# DBサーバ専用のマシンの場合はメモリの50%-80%を指定
innodb_buffer_pool_size = 256M
# InnoDBの更新ログを記録するメモリ上の領域
innodb_log_buffer_size = 8M
# InnoDBの更新ログを記録するディスク上のファイルのサイズ
# 大きくするとパフォーマンスはあがるがクラッシュ時のリカバリに時間がかかるようになる
innodb_log_file_size = 64M
# データをファイルに書き込む際のメソッド。
# Linuxの場合は O_DIRECTがパフォーマンス的にはよい
innodb_flush_method = O_DIRECT
# InnoDBのログバッファをInnoDBログファイルに書き込むタイミングを決める
# 基本的には1
innodb_flush_log_at_trx_commit = 1
# 2相コミットを行うかどうか
innodb_support_xa = OFF
# クラッシュ対策としてデータの二重書き込みを無効にする
skip-innodb_doublewrite
innodb_で始まるInnoDB関連の設定項目の詳細についてはMySQL5開拓団 ストレージエンジンの吟味 (2)にとても詳しく載っているので一読してみた方がよいです。あとはDSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!も非常に参考になるでしょう。MySQLの設定はなかなか奥が深いですが、設定項目の意味を理解していればよいパフォーマンスを引き出せると思います。
WordPressで現在表示している投稿に関連するものを自動で抽出して表示するプラグインであるSimilar Postsを入れてみました。インストールは、このプラグインが必要とするPost Plugin Libraryというものが必要なので、これもあわせてダウンロードしていつものようにwp-content/plugins/ に放り込んで管理画面から有効化するだけです。あとは管理画面で表示する投稿の数を設定したり、カテゴリをこえて関連する投稿を表示するかなどの設定をします。
中身はPHPよくわからないのでほとんど知らないのですが、このプラグインをインストールするとどうやら wp_similar_posts, wp_term_relationships, wp_term_taxonomy などのテーブルができていて、現在の投稿に関連する情報を保存しているようです。で、投稿を表示するときに表示スピードが遅くなったりしないか少し気になったのですが、プラグインを無効にした状態と有効にした状態で差異がありませんでした(どちらでも1.4秒程度)。というわけで安心して使えそうです。
それにしても最近WordPressの話ばかりだなぁ…
WordPressでのSEO対策の定番らしいAll in One SEO Pack。これを入れると
- TOPページにmetaタグのkeywordsやdescriptionが設定できる
- 記事ごとにmetaタグのkeywordsやdescriptionが設定できる
- それぞれの投稿ページのタイトルを「タイトル | ブログのタイトル」のように設定できる
ので入れてみました。インストール自体はお決まりの wp-content/plugins/ に放り込んで管理画面から有効にするだけ。実際に使っていて気になったのが、出力されるmetaタグの位置。テーマによるのかもしれませんが、CSSやJavaScriptの後ろに来ちゃっているのでこれをなんとかしたいです。
あと管理画面から設定できるオプションで Use noindex for Categories, Use noindex for Archives っていうのがあるのですが、デフォルトでONになっています。カテゴリやアーカイブの一覧ページでは
<meta name="robots" content="noindex,follow" />
と出力されるのですが、インデックスされなくなっちゃうとSEO的にはマイナスなのではないかと思いました。noindexにしないと逆にspamだと思われちゃったりするのかなぁ。時間があったら本家のドキュメント読んでみたいと思います。FAQのページなどを読んでみましたが特に書いてなかったので謎。
なお、導入にあたってはこちらを参考にさせてもらいました。
Apacheでは何も設定しないとデフォルトでレスポンスヘッダーに
Server: Apache
のような情報を残してしまいます。ServerTokens ProductOnly としてもApacheであることは隠せないので、mod_headersを使って
Header unset Server
とするのが正解なのか一応ぐぐってみたところ、ここのような「ソースを修正する」という残念なアドバイスが載っていました。それmod_headersでできるよ!とつっこんであげたかったのですが、解答が締め切られていたのが残念です。
ちなみにPHPは何も設定しないと
X-Powered-By: PHP/5.2.6-2ubuntu4
というようなヘッダーを出してしまうので、これもあわせて
Header unset X-Powered-By
しておきました。php.iniを修正すればいいらしいのですが、Ubuntuだとどこにあるのか調べるのが面倒だったのでApache側で対処。しかしデフォルトの設定っていうのは本当に怖いなぁと思いました。
2009/6/28 追記:Header unset Serverはリバースプロキシの環境でしかunsetできなさそうです。Header set Server hogeのようにして隠すことはできるはずです(未検証ですが)
もともとFeedBurnerを使っていたので、WordPressが生成するFeedのURLを変えたいと思って色々ぐぐっていたら、そのままずばりのことを書いている方がいらっしゃいました。というわけでありがたくそのままやってみると管理画面からFeedのURLを入力するだけで見事変わりました。
オリジナルのソースはCreating your WordPress feed (self-hosted WordPress)に書いてあって、FeedBurner自体がこのような情報提供を行っていることにちょっと驚き。WordPressってやはりすごい使われているのですな。
ユーザビリティ兼SEO対策としてパンくずを表示できるプラグインを探していたところ、Breadcrumb Navigation XTというのがメジャーらしいのでこれを使ってみました。プラグイン自体はダウンロードしてwp-content/plugins/ に放り込んで管理画面から有効化するだけなのですが、ちょっと面倒なのが現在使用しているテーマのファイルをいじってパンくずを表示したい箇所にコードを挿入しなくてはいけないこと。
<?php
if (class_exists('breadcrumb_navigation_xt')) {
// new breadcrumb object
$mybreadcrumb = new breadcrumb_navigation_xt;
$mybreadcrumb->opt['title_blog'] = 'おいぬま日報2';
$mybreadcrumb->opt['singleblogpost_prefix'] = '';
$mybreadcrumb->opt['separator'] = ' » ';
$mybreadcrumb->opt['singleblogpost_category_display'] = true;
// Display the breadcrumb
$mybreadcrumb->display();
}
?>
こんな感じのコードを今使っているテーマのsingle.phpに入れなくてはいけないのですが、自分はテーマのコードをあまり汚したくないので、wp-content/themes/今使っているテーマ/breadcrumb.php というファイルを作ってその中に上記のコードを入れました。
で、あとは wp-content/themes/single.php から
<div class="breadcrumb">
<?php include(TEMPLATEPATH . "/breadcrumb.php"); ?>
</div> <!-- [breadcrumb] -->
を挿入。これでちょっとはすっきりしました。
それにしてもプラグインが生成するコードをテーマごとに手作業で入れなくてはいけないなんてイケてない設計のような気が…
約5年間使ってきたtDiaryですが、やっぱりイマイチレスポンスが遅いのとWordPressの方が圧倒的に使いやすいのでこちらに移行しました。RSSはFeedBurnerなので今から新しい方が出るように直してます。こういう時には便利なサービスだなぁ。
というわけでありがとうtDiary!よろしくWordPress!
コメント