見出し画像

WordPressのWordfenceというプラグインを利用時に「Table 'wp_wfConfig' doesn't exist for query」のエラーが出た場合はMySQLの設定をlower_case_table_names=1に変更する

WordPressで運営されているサイトのサーバーを移行する際に、ソースコードもMySQLのDumpも取って移行したのに、いざサイトを動かしてみると以下のようなエラーが発生していました。

Table 'wp_wfConfig' doesn't exist for query SELECT name, val, autoload FROM wp_wfConfig ....

wfConfigとは、WordPressのセキュリティ対策用Pluginである「Wordfence」によって利用されているテーブルです。

MySQLのDumpを取って移行したのになぜTableがないのかと疑問に思いDBのTableを確認してみるとTable名が「wp_wfconfig」のようにすべて小文字になっていました。

移行元となるDBのTable名を確認しても「wp_wfconfig」になっていましたが、そのサーバーでは正常に動作しています。

実は、MySQLでは識別子の大文字小文字をどのように区別するかをlower_case_table_namesに何の数字を設定するかで制御することができます。

今回の場合、移行元のサーバーではlower_case_table_names=1、名前比較で大文字小文字区別せずすべて小文字に変換される、を指定しているのに移行先のサーバーではlower_case_table_names=0、大文字小文字を区別する、になっているのが原因でした。

WordPressのデフォルトのテーブル名はすべての小文字になっているので基本的にはこの設定の違いでエラーが発生することはあまりないと思いますが、Pluginを利用しているケースだとそのPlugin製作者の趣向によってテーブル名に小文字大文字入り交じることもあるので注意が必要です。

今回はMySQLの設定ファイルである、/etc/my.cnf に以下な設定を入れることでエラーを解消することができました。

[mysqld]
...省略

lower_case_table_names=1

この記事が気に入ったらサポートをしてみませんか?