Kusanagiのbcacheを有効にできないエラーの解決方法
概要
Kusanagiを利用して構築したWordPressのWebサイトについて、キャッシュ機能のbcacheを有効にできないという問題がありました。
ここではそのエラーの解決方法について紹介します。
環境
- KUSANAGI Version 9.3.3-1.el9
- WordPress 6.3.1
問題について
Kusanagiを利用したWordPressについて、動作を高速化するためにbcacheを有効にしようとしました。
$ kusanagi bcache on <プロファイル名>
Turning bcache on.
bcache completed.
コマンドを実行した結果は、ちゃんと有効になっているようですが、bcacheを有効にしたWebサイトへアクセスすると、エラー画面が表示されて、正常にアクセスができません。
そこで、ログを確認してみると、次のようなエラーメッセージがログに書き込まれていました。
2023/08/30 10:18:38 [error] 10139#10139: 128 FastCGI sent in stderr: “PHP message: PHP Fatal error: Uncaught mysqli_sql_exception: Table > ‘.wp_site_cache’ doesn’t exist in /home/kusanagi//DocumentRoot/wp-content/advanced-cache.php:147 Stack trace: #0 /home/kusanagi//DocumentRoot/wp-content/advanced-cache.php(147): mysqli_query() #1 /home/kusanagi//DocumentRoot/wp-content/advanced-cache.php(232): SiteManagerAdvancedCache->__construct() #2 /home/kusanagi//DocumentRoot/wp-settings.php(96): include(’…’) #3 /home/kusanagi//wp-config.php(94): require_once(’…’) #4 /home/kusanagi//DocumentRoot/wp-load.php(55): require_once(’…’) #5 /home/kusanagi//DocumentRoot/wp-blog-header.php(13): require_once(’…’) #6 /home/kusanagi//DocumentRoot/index.php(17): require(’…’) #7 {main} thrown in /home/kusanagi/*/DocumentRoot/wp-content/advanced-cache.php on line 147” while reading response header from upstream, client: , server: , request: “GET ****** HTTP/2.0”, upstream: “fastcgi://127.0.0.1:9000”, host: “”, referrer: “https://”
ログを見たところ、bcacheで利用するwp_site_cacheテーブルが存在しないためにエラーが発生しているようです。
bcacheでは、キャッシュとして作成したデータをデータベースに保存するため、データベース上に保存するためのテーブルがないのであれば、エラーが発生するというのも納得です。
解決方法
今回私がとった解決方法は、自分でwp_site_cacheテーブルを作成するというものです。
wp_site_cacheテーブルの情報は、次のサイトを参考にしました。
https://www.ikumi-u.net/2018/11/post-914/
https://www.prime-strategy.co.jp/column/archives/column_284
最初に、Kusanagiのサーバーにログインをして、mysqlコマンドを利用してMySQLにアクセスします。アクセス時にMySQLのrootパスワードが必要になるので、Kusanagiの設定時に設定したパスワードを入力します。また、WordPressで設定したデータベース名も一緒に入力します。
$ mysql -u root -p <データベース名>
次に、wp_site_cacheテーブルを作成します。作成のためのSQLクエリは次になります。
create table wp_site_cache (hash varchar(32),
content longtext,
device_url text,
type varchar(20) NOT NULL,
post_type varchar(200),
headers text,
user_agent text,
server varchar(16),
updating tinyint(1) DEFAULT 0,
create_time datetime,
expire_time datetime
);
create index sc_hash on wp_site_cache(hash);
create index sc_type on wp_site_cache(type);
create index sc_updating on wp_site_cache(updating);
create index sc_expire on wp_site_cache(expire_time);
これらを実行したら、quitと入力して、MySQLからログアウトします。
quit
これで、問題が解決します。
さいごに
bcacheのためのテーブルが作成されていないというのは盲点でした。通常であれば自動でテーブルが作成されるはずなのですが、何かの手違いかバグで作成されていないと思われます。
同じような問題を抱える人の参考になればうれしいです。