結構前から、MySQLのサーバ(mysqld)が自動更新された後に自動起動せず※、不便な思いをしている。停まると使っている側(例: このブログ)がエラーになるので、ログインして手で起動する必要がある。

※推測だが、更新のスクリプトが間抜けで、更新後にうまく起動できないのではないか。

それが面倒なので、去年くらいから、crontabで定期的(10分ごと)にmysqldが起動しているかチェックし、していない時は起動するようにして居た。

ただ、ほとんどの場合は起動しているので、定期的にチェックするのは無駄だし、起動していない時に10分も待つのが嫌なので、以下のような自動起動処理を作った。

  1. 自動更新のログ(/var/log/apt/history.log)に、mysqldの更新が記録(追記)されるのを待つ。
    • tail -F -c 0 ファイル名 | egrep --line-buffered パターン
  2. 少し(10秒)待つ。
    • もしかしたら起動されるかも知れないので。
  3. mysqldが起動しているかチェックする。
    • systemctl status サービス名
  4. 起動していない時は起動する。
  5. 処理の実行が分かるようにメールを出す。
  6. 1に戻る。

ある程度は動作確認したが、ちゃんと動くかは次回の更新まで確かめられない。

そしてデバッグする羽目になる?w

 

MySQLは(僕にしてみれば出来が悪く、)ことあるごとに面倒を起こすので止めたいのだが、互換性があって容易に移れるものがないので我慢している。

 

PS. 書いたあとで調べたら、mysqldのサービスファイル(/lib/systemd/system/mysql.service)の "Restart=on-failure" を以下に換えるといいようだ。

Restart = always
RestartSec = 10

何かの考えが あった(やっぱりサボりたい?w)のだろうが、MySQLのパッケージに原因があった。ただ、この問題は以前は起こっていなかったため、本当に上の変更でいいのか疑問があるので※、適用するのは保留する。

※妥当であることを確認するには、問題が起こっていなかった時のサービスファイルを「発掘」して比較するのだろうが、面倒だ。

↑ ちゃんと動いていた頃のサービスファイルの発掘はできなかったが、サーバのOSをUbuntu 20に更新した時(2020/11)にsystemd(サービスファイル)による管理に変わったので、その最初のサービスファイルから ずっと駄目だったのではないか。

 

(2/6 5:12 OSのバージョン記載漏れを修正)

  •  1
  •  0

コメントを書く / Write a comment

名前 / Name    

メール / Mail 

URL