WordPressの自動更新でデータベースが落ちた件

今朝、気づいたらVPSでWordpressなサイト(このサイト)にアクセスすると、データベースエラーと出てアクセスできなくなってる事に気づいてびっくり。

慌ててターミナルからログインして確認をしたところ、どうも自動でアップグレードをしようとして失敗して起動できなくなってしまっていた様子。

以下確認した内容と復旧手順をメモしておくことにした。(が、再発時はこのページ見れないので別の方法で記録しておかないといけないな…)

MySQL 起動時のエラー

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

debian-sys-maint ユーザーでの接続に失敗していました。

Debian/Ubuntu 系の MySQL/MariaDB では、このユーザーを使って systemctl start mysql 時に内部的なメンテナンス処理(テーブルアップグレードなど)を行います。
/etc/mysql/debian.cnf に書かれているパスワードと、MySQL 内部に登録されているパスワードが一致していないと、このエラーが出ます。

AppArmor が my.cnf.fallback のアクセスを拒否

apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/etc/mysql/my.cnf.fallback"

こちらは致命的ではなさそうです。AppArmor によって一部のファイル読み込みが拒否されただけで、起動失敗の直接原因ではなさそうなのでひとまず放置。

mysql_upgrade が失敗

FATAL ERROR: Upgrade failed

debian-sys-maint でログインできず、テーブルのアップグレードに失敗しています。要はこれが原因。

原因と対応

原因

/etc/mysql/debian.cnf に書かれている debian-sys-maint のパスワードと、MySQL 内の mysql.user テーブルのパスワードが食い違っている。

そのため、アップグレード処理に失敗し、MySQL サービスが正常に立ち上がらない。

対応

  • MySQL をセーフモードで起動
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables &
  • パスワード認証を無効化して起動します。
    root でログイン
mysql -u root
  • debian-sys-maint ユーザーのパスワードを確認または再設定
    /etc/mysql/debian.cnf の内容を確認:
cat /etc/mysql/debian.cnf
  • この中に以下のような設定があります:
[client]
user     = debian-sys-maint
password = xxxx
  • この password に合わせて MySQL 内のユーザーを更新します。
USE mysql;

ALTER USER 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxx'; 

FLUSH PRIVILEGES;

exit;
  • MySQL を再起動
sudo systemctl stop mysql
sudo systemctl start mysql
  • テーブルのアップグレードを再実行
sudo mysql_upgrade

以上で、正常にupgradeが出来るようになり復旧しましたとさ。

タイトルとURLをコピーしました