🐳 使用 Docker Compose 安裝 MySQL(含配置詳解與常見問題)
標簽:#DockerCompose #MySQL #數據庫部署 #后端開發 #運維入門 #配置詳解
適合讀者:開發者、DevOps、新手運維人員
📌 一、前言
在日常開發與部署中,我們經常需要快速搭建一個獨立的 MySQL 實例。相比手動安裝,使用 Docker Compose 能以最小成本完成部署、啟動、關閉、遷移等一整套操作。
🧱 二、目錄結構
docker-mysql/
├── docker-compose.yml
└── my.cnf # 可選:自定義配置文件
?? 三、docker-compose.yml 配置詳解
version: "3.9"services:mysql:image: mysql:8.0container_name: mysql8restart: alwaysports:- "3306:3306"environment:MYSQL_ROOT_PASSWORD: root123456 # ? root用戶密碼(必填)MYSQL_DATABASE: demo_db # ? 自動創建數據庫MYSQL_USER: dev_user # ? 創建新用戶MYSQL_PASSWORD: dev_pass # ? 用戶密碼volumes:- ./data:/var/lib/mysql # ? 數據持久化路徑- ./my.cnf:/etc/mysql/conf.d/my.cnf # ? 可選:自定義配置networks:- mysql_netnetworks:mysql_net:driver: bridge
🔍 參數詳解:
配置項 | 含義 |
---|---|
image | 使用官方的 mysql:8.0 鏡像 |
container_name | 容器名稱 |
restart: always | 容器異常退出后自動重啟 |
ports | 主機:容器 端口映射,默認 MySQL 為 3306 |
environment | 配置 MySQL 初始參數(環境變量) |
volumes | 掛載數據和配置,確保持久化 |
networks | 自定義網絡,支持多服務聯通 |
🧾 四、my.cnf 自定義配置(可選)
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
將其保存為
my.cnf
文件后自動生效,常用于統一字符集、SQL嚴格模式等。
🚀 五、啟動與使用
1?? 啟動容器
docker compose up -d
-d
表示后臺運行
2?? 查看運行狀態
docker ps
3?? 登錄 MySQL
docker exec -it mysql8 mysql -uroot -p
輸入
root123456
進入
🧪 六、連接測試(使用客戶端)
在 Navicat 或 DBeaver 中添加新連接:
- 主機地址:
虛擬機ip
- 端口:
3306
- 用戶名:
dev_user
- 密碼:
dev_pass
- 數據庫:
demo_db
? 七、常見問題處理
問題 | 解決方式 |
---|---|
容器啟動報錯 Can't connect to local MySQL server | 檢查端口是否被占用,或數據目錄權限問題 |
Access denied for user | 檢查環境變量用戶名/密碼是否一致 |
字符集亂碼 | 使用 my.cnf 配置為 utf8mb4 |
Docker 數據未持久化 | 確認 ./data 已正確掛載 |
🛠 八、最佳實踐建議
- ? 使用
volumes
綁定宿主機數據,避免數據丟失 - ? 啟用
mysql.cnf
進行統一配置管理 - ? 推薦使用非 root 用戶連接數據庫
- ? 配合
phpMyAdmin
或其他服務通過 Compose 一鍵啟動集群
📦 九、擴展:一鍵添加 phpMyAdmin(可選)
phpmyadmin:image: phpmyadmin/phpmyadminrestart: alwaysports:- "8080:80"environment:PMA_HOST: mysql8depends_on:- mysqlnetworks:- mysql_net
🔍 參數詳解:
配置項 | 含義 |
---|---|
phpmyadmin | 官方 phpMyAdmin 鏡像 |
ports: "8080:80" | 主機8080端口映射到容器80端口 |
PMA_HOST: mysql8 | phpMyAdmin 連接數據庫主機名,應該與 mysql 服務名一致 |
depends_on: mysql | 啟動順序控制,先啟動 MySQL |
networks: mysql_net | 需要保證和mysql在同一網絡 |
啟動后訪問
http://虛擬機ip:8080
登錄可視化管理頁面。
輸入mysql的用戶名和密碼登錄:root/root123456
📚 十、結語
使用 Docker Compose 部署 MySQL 極大簡化了環境配置和版本控制,不論是本地開發、測試還是 CI/CD 環境搭建,都能快速、高效、可靠地完成數據庫部署任務。
👍 如果你覺得本文對你有幫助,歡迎 點贊 + 收藏 + 關注我,后續將持續更新更多 Docker、MySQL、SpringBoot 等技術實戰文章!