表題に書いてあるように
# Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename>
というエラーが出た場合
環境
- Mac
- Learning Locker in Docker Desktop
原因
-
appendonly.aofファイルというのが破損している。
Redis の AOF は「追記型ログ」なので、最後の部分だけ破損しやすい
対策
以下のコマンドを実行。意味は以下に解説。
(イメージのpull)
-
redis-check-aof などのツールを 同じバージョン環境で実行できるようにするためにpull
(バックアップ処理)
- alpine コンテナを一時的に起動し、終了後は自動削除。
- Redis のデータが入っている Docker ボリュームを、このコンテナの /data にマウント。
- 今いる作業ディレクトリ(ホスト)を /backup にマウント。
- tar ファイルをホストに書き出せる。
- Alpine のシェルで /data に移動し、その中身を tar.gz に固めて /backup に保存。
(修復処理)
- docker run : 新しいコンテナを一時的に起動する。
- --rm : コンテナ終了後に自動で削除する。ゴミが残らない。
- -it : 対話的モード(-i 標準入力を開く、-t 擬似端末を割り当てる)。
- Docker ボリューム learning-locker-docker-image-main_learninglocker-redis をコンテナ内の /data にマウントする。
- Redis のデータファイル(appendonly.aof や dump.rdb)がここに入っている。
- サーバーではなく、同じイメージに含まれるツール redis-check-aof を実行したい。そこで --entrypoint で実行プログラムを差し替えている。