解決頁

為什麼重建 MySQL 5.7 容器後舊密碼仍然有效

安裝腳本重建 mysql57 時會繼續掛載 /data/mysql5.7/data。MySQL 只會在資料目錄為空時初始化帳號,因此既有資料庫不會因安裝變數變更而重設憑證。

更新時間 2026-10-29

問題說明

重跑時我改了 MYSQL_ROOT_PASSWORD、資料庫名稱或使用者名稱,為什麼舊憑證和資料還在?

這個 helper 會刪除並重建同名容器,但會把既有主機目錄 /data/mysql5.7/data 再掛載到新容器。刪除容器不會刪除 bind mount 中的資料庫。

MySQL 官方映像檔只會在空資料目錄建立資料庫時套用 MYSQL_ROOT_PASSWORD、MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD 和初始化檔案。目錄已有資料庫時,這些初始化設定不會重寫帳號或資料。因此 helper 新產生並列出的密碼,可能不是既有資料庫接受的密碼。

不要為了強制初始化而刪除或清空資料目錄。先確認目前掛載並保全資料庫。如果仍有獲授權的帳號,透過經過審查的 SQL/管理流程變更密碼;如果已無法登入,先規劃並驗證備份與復原路徑,再進行任何修改。

處理重點

  • 唯讀檢查:執行 docker inspect mysql57 --format "{{json .Mounts}}",確認實際資料掛載目錄。
  • 唯讀檢查:用 docker ps --filter name=mysql57 和 docker logs --tail 100 mysql57 查看容器狀態與啟動輸出;日誌可能含敏感資訊。
  • 如果既有且獲授權的帳號仍可用,執行 SELECT VERSION(), CURRENT_USER(); 確認實際連線的服務與帳號。
  • 在備份與復原方案經過驗證前保留原資料目錄;不要把重建容器當成資料庫重設。

所屬專題

PHP 7.2/Workerman 3.5.24 範例用於有升級計畫的遺留相容工作。