2週間ぶりに復旧

発端は3/11(土)。
FreeBSDのベースに含まれる OpenSSLではなく、Portsで入れた OpenSSLを使うようにしたら、portsupgradeで失敗する奴が出ていたので、それの修正をしたりしていたらなぜか MySQLが起動しなくなってしまいました。

「ibdata1のサイズが設定ファイル(my.cnf)と違うので起動出来ません」とかいうエラーで、ググってみると「ibdata1を消して作り直せ」とかいうクソ情報ばかり(ibdata1はInnoDBのデータそのもの)で役に立たず。
そもそも(/var/db/mysql/にある)my.cnfの設定なんて変えていない。 フテって1週間放置。
こういうとき MovableTypeは静的ページだから、(タグ)検索さえ使わなければ記事へのアクセスができるのはいいね。

んで先週末。 データディレクトリ(/var/db/mysql)をmvしてバックアップ。 mysql-serverを make deinstall してインストールし直しました(mysql57-server-5.7.17_3)。
そしたらなんか /usr/local/etc/mysqlというディレクトリが出来てて、その中にmy.cnfが出来ている。
中を見てみると、「innodb_data_file_path = ibdata1:128M:autoextend」とか書いてある。
既存の ibdata1は 76MBなので、そりゃサイズが違うわけだよね。
いったん ibdata1をバックアップして作り直したときに、何故かサイズが128MBになっていたのはこのせいか。
どうやら設定ファイルとして、 /var/db/mysql/my.cnfじゃなくて /usr/local/etc/mysql/my.cnfを参照するように変わっていたようだ。
でも先週末はキャンプに行くことにしていたので、またもや放置。

さて今週末。
/usr/local/etc/mysql/my.cnfを「innodb_data_file_path = ibdata1:76M:autoextend」に変更した。
古いゴミを入れないように新しく /var/db/mysqlを作成し、バックアップから

ib_logfile0
ib_logfile1
ibdata1
mt_db (MovableTypeのテーブル定義が入っているディレクトリ)
mysql (MySQLのテーブル定義が入っているディレクトリ)

を戻して MySQLを起動したらあっさりと成功。
でもログを見るといくつかワーニングが出ていたので、 mysql-updateを動かしたら各テーブルはずべて OKに。
MTの管理画面にも無事入れて、こうして記事を書いている訳です。
一時は14年分のデータベースを諦めなければならないかと覚悟をしましたが、復活できてよかったです。
というかバックアップちゃんと取ろうね > オレ


そういえば、Let's Encryptの期限が来たのでそれの更新もしました。
注意すべきは、HTTPアクセスを HTTPSアクセスに自動で飛ばしている場合、それを一時的に停めてから行う必要があります。
念のため最初は「 --dry-run」オプションをつけて実行した方がいいでしょう。

root@www:~ # certbot renew

個別の証明書を更新する場合は、

root@www:~ # certbot certonly -w /usr/local/www/data -d blog.still-laughin.com

期限が短いのは面倒ですが、更新自体はカンタンでいいですね。