WordPress: MySQL 5.7 データベースのメンテナンス

なんか最近、運用しているWordPressのレスポンスが悪い気がしています。
特に、WP Statistics プラグインの更新が発生するたびに、データベースのアップデートに長時間要しています。
ひょっとして、MySQLデータベースを手動で更新しなくちゃいけない状況が発生しているの?と、以前、MySQLに新規ユーザーを登録しようとしてできなかったメモを参考にして、「mysql_upgrade」コマンドを発行してみたところ、エラー発生!!

Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
mysql_upgrade: [ERROR] 1146: Table 'mysql.innodb_table_stats' doesn't existし

心配になって、ログファイルを確認したところ、以下のテーブルが見つからない とか、統計関係の行が無いか破損しているという警告とエラーが大量に含まれていることを発見。

2022-12-31T23:41:04.941636Z 0[ERROR] InnoDB: Table `mysql`.`innodb_table_stats` not found.
2022-12-31T23:41:04.941665Z 0 [Warning] InnoDB: Recalculation of persistent statistics requested for table `database1`.`wpdb_statistics_useronline` but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.

やべ~。

けど、どうしたらいいのかわからない!

エラーメッセージを検索してみると、参考になるページが見つかりました。

なんと、MySQL 5.6 のバグだそうです。私のMySQLは5.7で運用しているのですが、MySQLの管理は pkg コマンドに任せっきりなので、問題が起きていることに気づきもしないうちに、5.6 → 5.7 と使い続けていたようです。

情報発信の方のOSはLinuxですが、FreeBSDでも基本的に管理方法は同じ。デフォルトデータベースのある位置が異なるだけのようです。

mysqlにrootユーザーでログインし、mysqlデータベースを選択した後、サイトの情報通りにコマンドを発行。

root@localhost [mysql]> drop table innodb_table_stats;
ERROR 1051 (42S02): Unknown table 'mysql.innodb_table_stats'

しかし、エラーが発生。
おかしい。と思うものの、mysql データベースのテーブルを表示させてみると、dropコマンド発行前に存在していたテーブルは消えている模様。エラーは表示されるもののテーブルは消えているという結果になるのもバグの影響なのかも。

とりあえず、指定されたテーブルを全部消して、mysql を抜け、指定ディレクトリのファイルを削除。

再びmysql にログインして、消したテーブルを作り直し、mysqlを再起動。

ログに記録されていた上記のエラーは出なくなった模様。しかし、バグありバージョンを長期間使用していたためか、テストで作成した未使用データベースが壊れているのか、ログが増え続けていました。
なので、まず不要な未使用データベースを削除。それから、mysql_upgrade コマンドで、しばらくメンテナンスしていなかったWordPress用データベースをアップデート。

そうしたら、また別のエラーが複数発生。

error    : Table upgrade required. Please do "REPAIR TABLE `wpdb_comments`" or dump/reload to fix it!

なんか手動でアップデートが必要なテーブルがあるとのことなので、mysql に入って指示通りにコマンドを発行。これで、ログファイルが巨大になるようなエラーやらワーニングの出力はほぼ止まった感じです。

しかし、WordPressがMySQLをどういう風に使っているのかメカニズムを知らないので、今後もモニターして行かなくちゃいけません。

とりあえず、一番大切な自分が書いたコンテンツは、エクスポートしてバックアップしておきました。

コメントを残す