インデックス再作成の設定について

先日キャッシュのクリアでエラーを生じました。

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'データベース名.PageSearchIndex' doesn't exist

調べるとデータベースから PageSearchIndex テーブルが消失しておりました。

現在[管理画面]-[システムと設定]-[自動化]-[タスク]の[コンテンツのインデックス再作成]を 1 日 1 回 Cron で実行しています。
[アクティビティ]を見ると Currently Running のままになっています。

契約サーバーのサイトを確認すると[コンテンツのインデックス再作成]を実行中に障害が発生していたようです。
サイトはバックアップから復旧しました。

[コンテンツのインデックス再作成]の設定は以下のようになっています。
[再インデックスするオブジェクト]はページとファイルです。

[インデックスをクリア][はい]
[インデックス再構築][はい]

今回はサーバーの障害が原因と考えておりますが、ホスティングサービスでは深夜〜早朝にメンテナンス等でサーバーが停止することもあるかと思います。
どちらも[はい]で運用した場合、実行中にサーバーが停止した際のテーブルの消失といったリスクは[いいえ]の場合より高まるのでしょうか。

どちらも[いいえ]で運用すると古いインデックスが残る等問題を生じるのかなという憶測に基づく設定です…
振る舞いの違いや推奨される設定などご教示いただけましたら幸いです。

Concrete CMS バージョン
9.2.1

PHP バージョン
8.0.x

サーバー
エックスサーバー

こんにちは。

今回はサーバーの障害が原因と考えておりますが、ホスティングサービスでは深夜〜早朝にメンテナンス等でサーバーが停止することもあるかと思います。

そうですね。今まで、Concrete CMS が原因で、PageSearchIndex テーブルが消失したというケースは聞いたことがないですし、現時点の Concrete CMS コアのコードであり得ないです。

ホスティングサービス側の障害の可能性がかなり高いです。

どちらも[はい]で運用した場合、実行中にサーバーが停止した際のテーブルの消失といったリスクは[いいえ]の場合より高まるのでしょうか。

いえ、関係ないですね。

PageSearchIndex テーブルだけであれば、このテーブルだけを空の状態で再作成することで復旧できることがあります。

ちょっと時間がなくて、全然確認してないのですが😅

もしかしたら
コアで利用しているテーブルが消失した場合、PageSearchIndex テーブル自体は、タスクを実行することでデータを元に戻せるので、テーブルを再作成するだけで復活できると思います。

以下のアクションで復活できたかもしれません。

管理画面
[システムの設定] - [サーバー設定一覧] - [データベースエンティティ]

URL であれば以下です
[自分のコンクリURL]/index.php/dashboard/system/environment/entities

ここで、左下の「エンティティを更新」を押して、テーブルが復活するか試してみてください。
image

すみませんが、ちょっと僕、時間がなくなったので検証できないです。

ただ、他のページ情報を保存しているテーブル自体が消失してしまった場合、それらはバックアップのみからしか復活できないので、バックアップから復旧するという方法しかないかもしれません。

テーブル消失の一因が当方設定にもあるのではと心配になりお尋ねしました。
関係ないとのことで安心いたしました。

コアで利用しているテーブルが消失した場合、PageSearchIndex テーブル自体は、タスクを実行することでデータを元に戻せるので、テーブルを再作成するだけで復活できると思います。

作業中[コンテンツのインデックス再作成]は手動で実行してみたのですが

concrete/bin/concrete task:reindex-content --verbose --clear --rebuild pages

キャッシュのクリアと同様のエラーを生じたため諦めてバックアップから復旧しました。
また同じ状況に陥った際は[エンティティを更新]での復旧を試してみます。
お忙しいところご対応くださいましてありがとうございました。

誤った回答を目にしたので補足しておきます。
「エンティティを更新」では、PageSearchIndexテーブルは復活できません。
また、PageSearchIndexテーブルを空の状態で再作成することでも復旧できません。
現状Concrete CMSの機能として復活させる手段はありません。
バックアップから復旧してください。

現状Concrete CMSの機能として復活させる手段はありません。

本件承知しました。

考えてみますと障害に伴う不具合の正確な影響範囲を当方では判断できそうにありません…
このケースでは問題のなかった時点のバックアップから復旧する前提の方が堅実かもしれません。
ご回答ありがとうございました。

1 Like

@Jun_22 すいません。ブロックなど別の箇所のDBテーブル (だったけな・・・?)と混同していていました。
バックアップから復旧ということで、よろしくお願いします。