最近將一個 Docker Compose 環境中的 MySQL 容器從 9.2 升級至 9.3,結果服務一直無限重啟,無法啟動。在這篇文章中,分享實際排查過程與解決方式,幫助有相同問題的你快速修復。
問題描述
升級完成後,執行 docker ps
發現 MySQL 容器不斷重啟:
mysql Restarting (1) 3 seconds ago
查看日誌可以發現錯誤訊息如下:
docker logs mysql
重複出現以下錯誤:
[ERROR] [MY-000067] [Server] unknown variable 'innodb-log-file-size=2G'.
[ERROR] [MY-010119] [Server] Aborting
問題原因
MySQL 9.3 移除了對 innodb-log-file-size
這個參數的支援,而這個參數過去在 MySQL 5.x~8.x 都還是有效的。
一旦 Docker Compose 配置中包含該參數,MySQL 9.3 就會啟動失敗,進入 crash loop(不斷重啟)。
解法步驟
✅ 步驟 1:確認是否透過 command
傳入錯誤參數
如果你的 docker-compose.yml
中有類似下列設定:
services:
mysql:
image: mysql:9.3
command: --innodb-log-file-size=2G
請直接將這一行 移除 或註解掉:
# command: --innodb-log-file-size=2G
✅ 步驟 2:確認是否掛載 my.cnf
設定檔
你可能透過 volume 掛載主機上的 my.cnf
設定檔,例如:
volumes:
- ./my.cnf:/etc/mysql/conf.d/my.cnf
請打開 my.cnf
,找到這行並註解掉:
# my.cnf 範例
[mysqld]
# 這行要註解或刪除
# innodb-log-file-size=2G
儲存後重啟容器。
✅ 步驟 3:重啟容器
修改完畢後,重啟整個服務:
docker compose down
docker compose up -d
或是單獨重啟 MySQL 容器:
docker restart mysql
成功啟動範例
重新啟動後,可用以下指令驗證 MySQL 是否已成功啟動:
docker logs mysql
你應該會看到類似:
MySQL Server - start.
InnoDB initialization has started.
InnoDB initialization has ended.
Server is ready for connections.
結語
MySQL 在 9.x 開始移除了一些過去版本中的參數,像是 innodb-log-file-size
就是其中之一。在進行重大版本升級時,務必事先閱讀 官方 Release Notes 或檢查已棄用的參數,才能避免升級後無法啟動的情況發生。
希望這篇排錯筆記對你有幫助 🙌