勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

Plesk12で「SQLSTATE[42S02]: Base table~~」エラー時の対応方法

   2024/02/20  サーバー

Plesk12のログインページを開くと「ERROR: Zend_Db_Statement_Exception: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'psa.sessions' doesn't exist (Pdo.php:234)」と表示されログインできなかった。対応方法のメモ。

 

エラーログを確認する

/var/log/mysqld.logにあるMySQLのログを確認したところ以下エラーが出力されていた。

[ERROR] Cannot find or open table psa/sessions from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html
how you can resolve the problem.

Google翻訳にかけると以下になる。

[ERROR]テーブルpsa / sessionsが見つかりません。
InnoDBの内部データディクショナリは.frmファイルですが、
テーブルが存在する。おそらくあなたはInnoDBデータを削除して再作成したでしょう
対応する.frmファイルを削除するのを忘れてしまった
InnoDBテーブルの.frmファイルを別のデータベースに移動しましたか?
テーブルには、このバージョンのエンジンのインデックスが含まれています
サポートしていません。
http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.htmlを参照してください。
どのように問題を解決できるか。

psaデータベースのsessionsテーブル? とかいうのが見つからないっぽい。尚、psaデータベースとはPlesk自体の管理用データベースらしい。

 

バックアップを探す

Pleskデータベースは自動で/var/lib/psa/dumps/ディレクトリにバックアップされる。mysql.daily.dump.*.gz(*部分は数字)のファイルがバックアップファイルになる。最新のものをローカルに落として中身を見たところpsaデータベースのdumpファイルだった。

 

psaデータベースの確認

以下で確認する。

#SSHでMySQLにログイン
mysql -uadmin -p`cat /etc/psa/.psa.shadow`

#psaテーブルの確認
mysql> show databases like 'psa';

#以下の場合だとデータベースごと破損(ケース1)
Empty set (0.00 sec)

#以下の場合だとデータベースはあるが中身が破損(ケース2)
+----------------+
| Database (psa) |
+----------------+
| psa            |
+----------------+
1 row in set (0.00 sec)

ちなみに今回はケース2の方だった。

 

ケース1の場合

#バックアップファイルの解凍(ローカルのものをアップロードしてもよい)
gunzip /var/lib/psa/dumps/mysql.daily.dump.0.gz 

#インポートする
mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa < /var/lib/psa/dumps/mysql.daily.dump.0

 

ケース2の場合

dumpファイルの中にcreate database psaの記述が上部にあるのでコメントアウトか削除した上でサーバにアップする。

#SSHでMySQLにログイン
mysql -uadmin -p`cat /etc/psa/.psa.shadow`

#インポートする
source /hoge/hogehoge/psa.dump;

 

原因

直近でMySQLのストレージエンジンをMyISAMからInnoDBに変更した。その際に/var/lib/mysqlディレクトリにあるib_logfile0、ib_logfile1、ibdata1のファイルは他所に移した。するとinformation_schema以外で通常時に使っているデータベース(psa以外)がテーブル名は表示されるものの、テーブル内のデータは見られなくなった。ここが原因だと思われる。

通常時に使っているデータベースはバックアップを取っていたのですぐにインポートしたが、psaデータベースは認知していなかったので焦った。

 

その他

以前にCentOSのバージョンを上げてOpenSSHか何かを更新した際に、今回とはまた違うエラーだったとは思うがPleskにログインできなくなった。Pleskの管理画面上以外(SSH接続とか)からサーバ設定を変更するとリスクを伴うので注意する。

 

参考サイト

https://support.plesk.com/hc/ja/articles/213369589--Plesk-%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93-ERROR-PleskFatalException-Unable-to-connect-to-database-Unknown-database-psa-

https://support.plesk.com/hc/ja/articles/213904125--Plesk-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%80%E3%83%B3%E3%83%97%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97-%E5%BE%A9%E5%85%83%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF

 - サーバー

  関連記事

VirtualHostを設定しIPアドレスでもアクセスしたい

apacheでVirtualHostを設定しつつ、IPアドレスでもアクセスしたか ...

中国のIPアドレスをiptablesで拒否、遮断する

レンタルしているVPSの一つが最近よく落ちる。原因はどうも海外、特に中国から不正 ...

APCのインストール方法(pecl install apcでインストールできなかったためyumでのインストール方法)

APC入れたらPHPのメモリ消費を抑えられるというのを見たのでインストール方法を ...

AlmaLlinux8でswap領域を後から追加する方法

swap領域作成の際、だいぶ前にサーバに搭載されているメモリ量と同じ値(メモリ1 ...

iptablesが動いているか確認する方法

iptablesが動いているか確認する方法が分からなかったのでメモ。 servi ...