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接続とか)からサーバ設定を変更するとリスクを伴うので注意する。
参考サイト
関連記事
-
VirtualHostを設定しIPアドレスでもアクセスしたい
apacheでVirtualHostを設定しつつ、IPアドレスでもアクセスしたか ...
-
中国のIPアドレスをiptablesで拒否、遮断する
レンタルしているVPSの一つが最近よく落ちる。原因はどうも海外、特に中国から不正 ...
-
APCのインストール方法(pecl install apcでインストールできなかったためyumでのインストール方法)
APC入れたらPHPのメモリ消費を抑えられるというのを見たのでインストール方法を ...
-
AlmaLlinux8でswap領域を後から追加する方法
swap領域作成の際、だいぶ前にサーバに搭載されているメモリ量と同じ値(メモリ1 ...
-
iptablesが動いているか確認する方法
iptablesが動いているか確認する方法が分からなかったのでメモ。 servi ...