WordPressで膨らむerror_log

ワードプレスのルートディレクトリーもしくはそのワードプレスを使用しているドメインのルートディレクトリーに”error_log”というファイルが生成される。読んで字のごとく、エラーを記録するログである。

この記事は自分及び同じ問題にさしあたっている人の為の資料として公開しています。何か問題 及び 修正追加等があればコメント欄に書き込んでくださいm(_!_)m そしてなにかをする場合はもちろん自己責任です。

問題:以下の様なエラーが記録されている。

[25-Jun-2016 16:41:09 UTC] WordPress database error Table '(データベース名).wp_termmeta' doesn't exist for query SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (3,172,211,579,573,576,577,581) ORDER BY meta_id ASC made by require('wp-blog-(テーマ内ファイル).php'), require_once('wp-includes/template-loader.php'), include('/themes/(テーマ名)/(テーマ内ファイル).php'), get_header, locate_template, load_template, require_once('/themes/(テーマ名)/(テーマ内ファイル).php'), get_template_part, locate_template, load_template, require('/themes/(テーマ名)/(テーマ内ファイル).php'), wp_nav_menu, wp_get_nav_menu_items, get_terms, update_termmeta_cache, update_meta_cache
[25-Jun-2016 16:40:17 UTC] WordPress database error Table '(データベース名).wp_termmeta' doesn't exist for query SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (3,172,211,579,573,576,577,581) ORDER BY meta_id ASC made by require('wp-blog-(テーマ内ファイル).php'), require_once('wp-includes/template-loader.php'), include('/themes/(テーマ名)/(テーマ内ファイル).php'), get_header, locate_template, load_template, require_once('/themes/(テーマ名)/(テーマ内ファイル).php'), get_template_part, locate_template, load_template, require('/themes/(テーマ名)/(テーマ内ファイル).php'), wp_nav_menu, wp_get_nav_menu_items, get_terms, update_termmeta_cache, update_meta_cache
[25-Jun-2016 16:44:28 UTC] WordPress database error Table '(データベース名).wp_termmeta' doesn't exist for query SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (528,276,269,275,561,186,303) ORDER BY meta_id ASC made by require('wp-blog-(テーマ内ファイル).php'), require_once('wp-includes/template-loader.php'), include('/themes/(テーマ名)/(テーマ内ファイル).php'), get_template_part, locate_template, load_template, require('/themes/(テーマ名)/(テーマ内ファイル).php'), get_related_wp_query_args, wp_get_post_tags, wp_get_post_terms, wp_get_object_terms, update_termmeta_cache, update_meta_cache
[25-Jun-2016 16:42:08 UTC] WordPress database error Table '(データベース名).wp_termmeta' doesn't exist for query SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (220,183,567,219,212) ORDER BY meta_id ASC made by require('wp-blog-(テーマ内ファイル).php'), require_once('wp-includes/template-loader.php'), include('/themes/(テーマ名)/(テーマ内ファイル).php'), get_template_part, locate_template, load_template, require('/themes/(テーマ名)/(テーマ内ファイル).php'), get_related_wp_query_args, wp_get_post_tags, wp_get_post_terms, wp_get_object_terms, update_termmeta_cache, update_meta_cache
[25-Jun-2016 16:49:55 UTC] WordPress database error Table '(データベース名).wp_termmeta' doesn't exist for query SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (184,183) ORDER BY meta_id ASC made by require('wp-blog-(テーマ内ファイル).php'), require_once('wp-includes/template-loader.php'), include('/themes/(テーマ名)/(テーマ内ファイル).php'), get_template_part, locate_template, load_template, require('/themes/(テーマ名)/(テーマ内ファイル).php'), get_related_wp_query_args, wp_get_post_tags, wp_get_post_terms, wp_get_object_terms, update_termmeta_cache, update_meta_cache
[25-Jun-2016 16:42:13 UTC] WordPress database error Table '(データベース名).wp_termmeta' doesn't exist for query SELECT term_id, meta_key, meta_value FROM wp_termmeta WHERE term_id IN (615) ORDER BY meta_id ASC made by require('wp-blog-(テーマ内ファイル).php'), require_once('wp-includes/template-loader.php'), include('/themes/(テーマ名)/(テーマ内ファイル).php'), get_template_part, locate_template, load_template, require('/themes/(テーマ名)/(テーマ内ファイル).php'), get_related_wp_query_args, wp_get_post_tags, wp_get_post_terms, wp_get_object_terms, update_termmeta_cache, update_meta_cache

上記の様なエラー内容がウェブサイトのページをロードするたびに一度に何行か並び、それが知らない間に数ギガ溜まっていた。

結局のところ問題なのはエラー内容が示す通り、データベースの中にその参照なり、書き込みなりをしたいテーブルが見つからないためにいちいちエラーになり、サーバーのCPUパワーをも消耗させたりし、サイトのパフォーマンスに影響が出てくる。

解決策:テーブルを作ってあげる

解決策はいたって簡単である。エラーが示す通り、必要なテーブルとその中身を作ってあげればよい。でも、SQLの編集がわからない場合は以下をそのままphpmyadmin等を使い、SQLのタブから入力、実行すれば問題は解決する。

phpmyadmin

以下からコピー&ペーストすればよい。注意事項として、テーブルのプレフィックスを「wp_」以外に変更していたり、下記の要件を満たしていればcollationは基本的に

utf8mb4_unicode_ci

のままで良いが、

  • WordPress 4.2かそれ以上
  • MySQL 5.5.3かそれ以上

それ以下なら

utf8_general_ci

に変更すればよいと思われる。

WordPressとMySQLのCollationについては、WordPress 4.2、MySQL 5.5.3及びutf8mb4についてを参照の事。
CREATE TABLE IF NOT EXISTS wp_termmeta (
meta_id bigint(20) unsigned NOT NULL,
term_id bigint(20) unsigned NOT NULL DEFAULT '0',
meta_key varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
meta_value longtext COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Indexes for dumped tables
-- Indexes for table wp_termmeta
ALTER TABLE wp_termmeta
ADD PRIMARY KEY (meta_id),
ADD KEY term_id (term_id),
ADD KEY meta_key (meta_key(191));
-- AUTO_INCREMENT for dumped tables
-- AUTO_INCREMENT for table wp_termmeta
ALTER TABLE wp_termmeta
MODIFY meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;

結果:以下を上記をSQLでそのまま実行した結果です。このままの結果で問題有りません。

phpmyadmin

こちらの環境では以後、error_logには何も記述されることは無くなりました。

あ、気づきましたか?記事が少しでも役に立ったと思ったらシェアでもコメントでもしてみてください^^;
このページの短いURL: https://thejuraku.com/pc/?p=3589
93 queries in 0.231 seconds.