MySQLでテーブルが作成できない時のトラブルシューティング
-
IP Geo Block というプラグインの作者です。海外のユーザーさんから データベース・テーブルが作成されない旨の問題 が上がってきており、その原因を切り分ける方法について相談させて下さい。
プラグインの機能としては、以下を実装しています。
- ログ記録用のテーブルをプラグインの有効化時に作成する(この時点でのエラーチェックは未実装)。
- 管理画面に入った時にテーブルが作成されていなければ、エラーを表示、再度、無効化->有効化を促す。
現在分かっているユーザーさんの情報は、以下の通りです(そのまんまのコピペです)。
Version: 5.5.32 | Server Name: angzvacom.fatcowmysql.com
Databases Available: unlimited | Used: 11※ angzvacom はアカウント名、fatcowmysql.com が MySQL サーバーの様です。
(情報源: http://www.fatcow.com/knowledgebase/read_article.bml?kbid=7137 )
※ http://www.fatcow.com/ の PHP バージョンは 5.0 と記載されています が、WordPress のホスティングもしているので、最低スペックは満足しているのだと思います。また、プラグイン側でも WordPress バージョン 3.7 以上が必要な事はチェックしています。
プラグイン有効化時のテーブルの作成は、
・ストレージエンジンは指定せず(デフォルト)
・文字セットは UTF8 に指定を基本に、以下のコードで作成しています。
global $wpdb; $table = $wpdb->prefix . self::TABLE_NAME; $wpdb->query( "CREATE TABLE IF NOT EXISTS $table ( No bigint(20) unsigned NOT NULL AUTO_INCREMENT, time int(10) unsigned NOT NULL DEFAULT 0, ip varchar(40) NOT NULL, hook varchar(8) NOT NULL, auth int(10) unsigned NOT NULL DEFAULT 0, code varchar(2) NOT NULL DEFAULT 'ZZ', result varchar(8) NULL, method varchar(255) NOT NULL, user_agent varchar(255) NULL, headers varchar(511) NULL, data text NULL, PRIMARY KEY (No), KEY time (time), KEY hook (hook) ) CHARACTER SET 'utf8'" );
※ 上記コードは「バッククォート」が正確に表現されていません。実際のコードは https://github.com/tokkonopapa/WordPress-IP-Geo-Block/blob/master/ip-geo-block/classes/class-ip-geo-block-logs.php#L21 を見て下さい。
管理画面でのテーブル有無のチェックは以下の通りです。
if ( $wpdb->get_var( "show tables like '$table'" ) !== $table ) return エラーメッセージ;
フォーラムからは、「管理権限を持っているか」、「他のプラグインが影響していないか」、「MU か」などが関連するかも知れない事柄として検索されましたが、MySQL に関しては知識が乏しく、どのようにトラシューすべきかが分かっていません。
何からどう切り分けていったら良いか、どうか、お力添えをお願いいたします。
- トピック「MySQLでテーブルが作成できない時のトラブルシューティング」には新たに返信することはできません。