なんか最近、運用している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をどういう風に使っているのかメカニズムを知らないので、今後もモニターして行かなくちゃいけません。
とりあえず、一番大切な自分が書いたコンテンツは、エクスポートしてバックアップしておきました。