3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerをアップデートしたら永続化したMySQLデータベースを読み込めなくなった

Posted at

Dockerを最新バージョンにアップデートしたら、永続化したMySQLデータベースを読み込めなくなり、本番環境に持ち込もうと思っていたMovable Typeの環境にアクセスできなくなりました。アクセスできないので、当然ダンプも取れません。
なんとか解決したので、取り急ぎ記事にします。

Dockerの環境設定を変更する

私が解決した方法から記載します。

環境設定の「General」にある「Choose file sharing implementation for your containers」へ移動し、「VirtioFS」が選択されていたのを「gRPC FUSE」に変更したところ直りました。

スクリーンショット 2023-11-08 17.53.59.jpg

現象

私はMacOS版のDockerを利用しており、docker-composeで、データベースの永続化をしていました。つまり、プロジェクト内のdb-dataディレクトリ内にデータベースを保存して、Dockerを終了してもデータが消えないようにしていました。

services:
  mysql: 

・・・

    volumes:
      - ./db-data:/var/lib/mysql

これが、Docker Desktopを 4.25.0 (126437) にアップデートしたところ、MySQLが起動しない状態となりました。
コンテナ内を詳しく見てみると、何度も起動と停止を繰り返しており、以下のようなエラーを出していました。

chown: changing ownership of '/var/lib/mysql/mysql.sock

既知の不具合らしい

エラーでひたすら検索したところ、以下のissueにたどり着きました。

どうもmysqlコンテナの立ち上げの際に chown コマンドが入るようになり、それがMacOSではエラーとなってしまうようでした。

さらにこのissueには、「私はここのURLのトップコメントで解決しました!」というコメントがありました。

解決

トップコメントは以下のように書かれています。

With the latest docker you can disable the gRPC Fuse for file sharing. (the gRPC Fuse setting is causing this problem, it's incompatible with the data dictionary of 0)
最新の Docker を使用すると、ファイル共有の gRPC Fuse を無効にすることができます。(gRPC Fuse 設定がこの問題の原因です。0 のデータ ディクショナリと互換性がありません)

Docker Desktopでは複数のファイルシステムを選択できるようで、私の環境では「VirtioFS」が選択されていました。もしかすると、今回のバージョンから初期状態がVirtioFSになって、gRPC FUSEから強制変更されたことにより、不具合が出たのかもしれません。

気が狂うかと思ったので、これからはこまめにバックアップを取ろうと思いました…

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?