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 用に最適化(アップグレード検証)して再起動する。
これで何とかなった。
なんだかんだで、新しいバージョンをインストールしてダンプから戻すが一番楽かもしれない。
コメントを残す