スポンサーリンク
WordPressの関連記事表示用プラグインYARPP(Yet Another Related Posts Plugin)の設定画面を開いてみたところ、最上部に、MySQLのストレージエンジンに関するエラーが表示されていました。そのエラー内容について対応してみたので、そのことについてメモしておきます。
スポンサーリンク
警告メッセージの内容
表示された警告メッセージは次の通りです。
YARPPの関連スコア計算の「タイトルを検討する」、「内容を検討する」オプションはデータベースの wp_posts テーブルが MyISAM を使用する必要があります。 wp_posts テーブルは現在 1 ストーレージエンジンを使用しているので、このふたつのオプションは使えません。 このオプションを使用したければ、wp_postsテーブルに対してこのようなクエリを実行してください:ALTER TABLE `wp_posts` ENGINE = MyISAM;。このクエリはデータは一切消しません。 wp79daf1postsテーブルが絶対MyISAMを使用していると思う方はこちらの魔法のボタンをどうぞ: [MyISAMを使っています。嘘じゃないから。]
MySQL上にあるpostsテーブルのストレージエンジンがMyISAMじゃないから、機能が制限されています、という警告のようですが、現在使用しているストレージエンジンの表示が「1」となっており、どこかおかしい気がします(これが例えば「InnoDB」と表示されているのならまだ分かるのだが)。
現在のストレージエンジンを確認
そこで、postsテーブルが現在利用しているストレージエンジンを確認してみることにしました。
次のようにコマンドを実行します。
$ mysql -h host -u user -p Enter password: ... mysql> show databases; ... mysql> use database_name; ... mysql> show table status;
として、チェックしてみると、postsテーブルは、MyISAMを使っていました。
すると、問題はないはずです。
原因を探るヒント
軽くプラグインを見てみると、yet-another-related-posts-plugin/class-core.phpにある「diagnostic_myisam_posts」で、MyISAMを使っているかどうかを確認しているようでした。
function diagnostic_myisam_posts() { global $wpdb; $tables = $wpdb->get_results("show table status like '{$wpdb->posts}'"); foreach ($tables as $table) { if ($table->Engine == 'MyISAM') return true; else return $table->Engine; } return 'UNKNOWN'; }
ここで気が付くのは、MyISAMであったとき、trueを返し、MyISAMでなければストレージエンジン名を返すというところです。
ここから、警告メッセージに表示された「1」が、実は「true」であったのではないか、と考えられます。
そして、今回の警告メッセージは、yet-another-related-posts-plugin/options.php
if ( !yarpp_get_option('myisam_override') && $yarpp->diagnostic_fulltext_disabled() ) { echo "<div class='updated'>" .sprintf(__("YARPP's \"consider titles\" and \"consider bodies\" relatedness criteria require your <code>%s</code> table to use the <a href='http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html'>MyISAM storage engine</a>, but the table seems to be using the <code>%s</code> engine. These two options have been disabled.",'yarpp'), $wpdb->posts, $table_type) ."<br />" .sprintf(__("To restore these features, please update your <code>%s</code> table by executing the following SQL directive: <code>ALTER TABLE `%s` ENGINE = MyISAM;</code> . No data will be erased by altering the table's engine, although there are performance implications.",'yarpp'), $wpdb->posts, $wpdb->posts) ."<br />" .sprintf(__("If, despite this check, you are sure that <code>%s</code> is using the MyISAM engine, press this magic button:",'yarpp'), $wpdb->posts) ."<br />" ."<form method='post'><input type='submit' class='button' name='myisam_override' value='" .__("Trust me. Let me use MyISAM features.",'yarpp') ."'></input></form>" ."</div>"; }
から出力されているようです。修正したい人は、このあたりから探してみてください。
対策
チェックした結果、MyISAMを使っているはずなので、警告メッセージに表示されていた「MyISAMを使っています。嘘じゃないから。」をクリックしました。
MyISAM専用機能を強制的に有効にしました。「タイトルを検討」と「内容を検討」機能が使えるようになりました。
すると、このように表示され、警告は表示されないようになりました。これにより、使えなかった機能が使えるようになったと思われます(このプラグインの場合、本文を参考にしたかどうか、のような機能が有効なのか無効なのかがわかりにくいのですが、ソースコードを見たところ、無効から有効になると思われるコードだったので、有効になったのだと推測しています)。
スポンサーリンク
スポンサーリンク