状況
再実行時に MYSQL_ROOT_PASSWORD、DB 名、ユーザーを変更したのに、以前の認証情報とデータが残るのはなぜですか?
このヘルパーは同名コンテナを削除して作り直しますが、既存のホストディレクトリ /data/mysql5.7/data を再マウントします。コンテナを削除しても bind mount 内の DB は消えません。
MySQL 公式イメージが MYSQL_ROOT_PASSWORD、MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD と初期化ファイルを適用するのは、空のデータディレクトリに DB を作るときです。既存 DB ではアカウントやデータは書き換えられません。そのため、新たに表示された生成パスワードと既存 DB が受け付けるパスワードが異なる場合があります。
初期化を強制するためにデータディレクトリを削除・空にしないでください。まず現在のマウント先を確認し、DB を保全します。使えるアカウントがある場合は、レビュー済みの SQL/管理手順で認証情報を変更してください。ロックアウト中なら変更前にバックアップと復旧手順を計画・検証します。
確認すること
- 読み取り専用: docker inspect mysql57 --format "{{json .Mounts}}" で実際のデータマウントを確認します。
- 読み取り専用: docker ps --filter name=mysql57 と docker logs --tail 100 mysql57 で状態と起動ログを確認します。ログに機密情報が含まれる可能性があります。
- 既存の許可されたアカウントが使える場合は SELECT VERSION(), CURRENT_USER(); を実行し、接続先を確認します。
- 検証済みのバックアップと復旧計画ができるまで元データディレクトリを保持します。コンテナの再作成を DB の初期化とみなさないでください。