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のためのテーブルが作成されていないというのは盲点でした。通常であれば自動でテーブルが作成されるはずなのですが、何かの手違いかバグで作成されていないと思われます。

同じような問題を抱える人の参考になればうれしいです。