MariaDBのバージョンアップでハマった話

MariaDBを、10.5系から11.8系にバージョンアップをしたのだが、このときの一連の作業でハマったことを書いておく。誰の役に立つのかはわからないけれど。

なにが起きていたかというと、「10.5系のDB状態が正しい状態ではなかった」と「11.x の新しい仕様制限」の2つの組み合わせで、複合的なエラーが発生して解決できなかった。

「10.5系のDB状態が正しい状態ではなかった」とは?

  • DBは正常終了させたはずだが、クラッシュした状態になっていた。
  • 以前に、10.5系にバージョンアップしたときに、DBのアップグレードをしたが、そのときから怪しげなログは出ていた。使えるからと放置していたのが、ここにきて問題が顕現した。

「11.x の新しい仕様制限」は?

  • 11.x からクライアント接続時のSSL要求が厳格化された。mariadb-upgrade –skip-ssl で回避。
  • 10.5 時代の Redo ログ(ib_logfile0)が未消化(クラッシュ)のまま放置されていた。11.x系では、仕様上、直接復旧ができなかった。
  • 10.5 時代で使えていた設定が 11.x で完全撤廃された、というのもあるが、これにはハマっていないはず。

いろいろと試したけれど、失敗したことなど。

起動時のエラーが、.errファイルに記録されておらず、エラーログを探しまわることに。messagesにも記録がなく。データファイルの保存場所にあったファイルの更新日付からエラーが記載されたファイルを特定した。wsrep_recovery.failに記録されていた。

一度、11.8を消して、10.5系のクラッシュの復旧ができる10.11系をインストールして、復旧を試みた。結局、MariaDBの起動時に復旧ができずに、クラッシュして、MariaDBは起動できなかった。

Redoログファイル(ib_logfile*)をリネームして起動を試す。これは、「MariaDB 11.x(および 10.8 以降)ではセキュリティ・データ保護のための仕様が変更され、未修復(クラッシュ状態)のデータがある状態で ib_logfile0 を削除・退避してしまうと、起動を完全に拒否する仕組み」によって、成功せず。

最終的にやったこと(成功したもの)

結局、既存のデータベースファイルを使ったバージョンアップは諦めて、MariaDBを削除(アンインストール)して、データファイルを消して、新規に新しいバージョンのMariaDBをインストールして、初期化してMariaDBを起動させた。ちゃんと起動した後に、ダンプファイルから復元した。

0. DBのバックアップ用にダンプファイルを取得(OSのバージョンアップ前にやっておく)

1. MariaDBを削除(アンインストール)

2. /var/db/mysql を退避・空にする

3. 新しいバージョンのMariaDBをインストールする

4. 「mariadb-install-db –user=mysql –datadir=/var/db/mysql」でDBの初期化(システムデータベースをインストール)

5. MariaDBを起動する

6. ダンプファイルからリストアする

7. 復元したデータ構造を MariaDB 11.x 用に最適化(アップグレード検証)して再起動する。

これで何とかなった。

なんだかんだで、新しいバージョンをインストールしてダンプから戻すが一番楽かもしれない。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です