問題別ガイド

MySQL 5.7:コンテナを作り直しても以前の認証情報が残る理由

このスクリプトは mysql57 を置き換える際も /data/mysql5.7/data を再利用します。MySQL がアカウントを初期化するのはデータディレクトリが空のときだけなので、既存 DB ではインストール変数を変えても認証情報はリセットされません。

更新日 2026-10-29

状況

再実行時に 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 の初期化とみなさないでください。

関連する特集

PHP 7.2 と Workerman 3.5.24 は、移行計画を伴う既存環境の互換性確認に限定してください。