Docker使用run命令部署MySQL的流程步驟
一、MySQL 容器化概述
1.1 容器化部署優(yōu)勢
- 環(huán)境一致性:消除"在我機器上能運行"的問題,確保開發(fā)、測試、生產環(huán)境完全一致
- 快速部署:秒級啟動 MySQL 實例,傳統(tǒng)方式安裝需要 10 分鐘以上
- 資源隔離:每個容器實例擁有獨立的運行環(huán)境,避免資源沖突
- 版本管理:輕松切換不同 MySQL 版本(5.7/8.0 等)
- 便攜性:鏡像可跨平臺運行,支持 x86/ARM 架構
1.2 官方鏡像特點
MySQL 官方 Docker 鏡像提供:
- 多個版本選擇(最新版/特定版本)
- 基于 Alpine 和 Debian 的兩種鏡像
- 自動初始化機制
- 環(huán)境變量配置支持
- 默認安全配置(非 root 運行)
二、基礎部署實戰(zhàn)
2.1 拉取官方鏡像
獲取最新 MySQL 8.0 鏡像:
docker pull mysql:8.0
驗證鏡像:
docker image inspect mysql:8.0 | jq '.[0].Config.Env'
2.2 最小化啟動命令
docker run -d \ --name mysql-dev \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -p 3306:3306 \ mysql:8.0
參數說明:
-d:后臺運行--name:容器命名-e:設置環(huán)境變量(必需設置 root 密碼)-p:端口映射(主機端口:容器端口)
2.3 連接驗證
使用 MySQL 客戶端連接:
mysql -h 127.0.0.1 -P 3306 -u root -p # 輸入密碼my-secret-pw
容器內連接:
docker exec -it mysql-dev mysql -u root -p
三、數據持久化方案
3.1 掛載數據目錄
創(chuàng)建數據目錄:
mkdir -p ~/mysql-data/{data,conf.d,initdb}
啟動容器:
docker run -d \ --name mysql-prod \ -v ~/mysql-data/data:/var/lib/mysql \ -v ~/mysql-data/conf.d:/etc/mysql/conf.d \ -v ~/mysql-data/initdb:/docker-entrypoint-initdb.d \ -e MYSQL_ROOT_PASSWORD=strongpassword \ mysql:8.0
目錄作用:
/var/lib/mysql:MySQL 數據文件/etc/mysql/conf.d:自定義配置文件/docker-entrypoint-initdb.d:初始化 SQL 腳本
3.2 自定義配置文件
示例 my.cnf:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci max_connections=200 innodb_buffer_pool_size=512M
3.3 數據庫初始化
在 initdb 目錄放置 SQL 文件:
echo "CREATE DATABASE appdb;" > ~/mysql-data/initdb/init.sql echo "CREATE USER 'appuser'@'%' IDENTIFIED BY 'userpass';" >> ~/mysql-data/initdb/init.sql echo "GRANT ALL ON appdb.* TO 'appuser'@'%';" >> ~/mysql-data/initdb/init.sql
四、安全加固配置
4.1 非 root 運行
docker run -d \ --user mysql \ --read-only \ --cap-drop ALL \ mysql:8.0
4.2 密碼加密策略
docker run -d \ -e MYSQL_ROOT_PASSWORD=securepass \ -e MYSQL_SECURE_TRANSPORT=ON \ -e MYSQL_SSL=ON \ mysql:8.0
4.3 網絡隔離
創(chuàng)建專用網絡:
docker network create mysql-net docker run -d \ --network mysql-net \ --name mysql-secure \ -p 3306:3306 \ mysql:8.0
五、高級管理技巧
5.1 性能調優(yōu)參數
docker run -d \ --name mysql-tuned \ -e MYSQL_ROOT_PASSWORD=pass123 \ -e MYSQL_INNODB_BUFFER_POOL_SIZE=1G \ -e MYSQL_INNODB_LOG_FILE_SIZE=256M \ -e MYSQL_MAX_CONNECTIONS=500 \ mysql:8.0
5.2 主從復制配置
主庫:
docker run -d \ --name mysql-master \ -e MYSQL_ROOT_PASSWORD=masterpass \ -e MYSQL_REPLICATION_USER=repl \ -e MYSQL_REPLICATION_PASSWORD=replpass \ -e MYSQL_MASTER_PORT=3306 \ mysql:8.0 \ --server-id=1 \ --log-bin=mysql-bin \ --binlog-format=ROW
從庫:
docker run -d \ --name mysql-slave \ --link mysql-master:master \ -e MYSQL_ROOT_PASSWORD=slavepass \ -e MYSQL_MASTER_HOST=master \ -e MYSQL_MASTER_USER=repl \ -e MYSQL_MASTER_PASSWORD=replpass \ -e MYSQL_MASTER_PORT=3306 \ mysql:8.0 \ --server-id=2
5.3 備份恢復方案
執(zhí)行備份:
docker exec mysql-prod sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql
定時備份腳本:
#!/bin/bash
BACKUP_DIR=/path/to/backups
DATE=$(date +%Y%m%d_%H%M%S)
docker exec mysql-prod mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases | gzip > ${BACKUP_DIR}/backup_${DATE}.sql.gz
find ${BACKUP_DIR} -name "*.sql.gz" -mtime +7 -delete
六、生產環(huán)境部署建議
6.1 資源限制
docker run -d \ --name mysql-production \ --memory="4g" \ --memory-swap="6g" \ --cpus="2" \ --blkio-weight=500 \ mysql:8.0
6.2 監(jiān)控配置
啟用性能模式:
docker run -d \ -e MYSQL_PERFORMANCE_SCHEMA=ON \ mysql:8.0
集成 Prometheus:
docker run -d \ -e MYSQL_EXPORTER=ON \ -p 9104:9104 \ mysql:8.0
6.3 高可用方案
使用健康檢查:
docker run -d \ --health-cmd="mysqladmin ping -uroot -p$$MYSQL_ROOT_PASSWORD" \ --health-interval=10s \ --health-timeout=3s \ --health-retries=3 \ mysql:8.0
七、常見問題排查
7.1 啟動失敗診斷
查看日志:
docker logs mysql-prod
常見錯誤:
- 密碼未設置:
MYSQL_ROOT_PASSWORD環(huán)境變量缺失 - 端口沖突:3306 端口已被占用
- 權限問題:數據目錄不可寫
7.2 性能問題分析
查看運行狀態(tài):
docker exec -it mysql-prod mysqladmin -uroot -p status
慢查詢日志:
docker exec mysql-prod sh -c 'cat /var/log/mysql/mysql-slow.log'
7.3 版本升級流程
- 備份所有數據
- 啟動新版本容器:
docker run -d \ --name mysql-new \ -v ~/mysql-data/data:/var/lib/mysql \ mysql:8.1
- 運行 mysql_upgrade
- 驗證后切換流量
八、最佳實踐總結
- 數據持久化:必須掛載/var/lib/mysql 目錄
- 密碼安全:使用強密碼并定期更換
- 資源限制:根據服務器配置合理分配 CPU/內存
- 定期備份:實現自動化備份策略
- 監(jiān)控告警:配置性能監(jiān)控和異常告警
- 版本控制:明確記錄使用的 MySQL 版本
到此這篇關于Docker使用run命令部署MySQL的流程步驟的文章就介紹到這了,更多相關Docker run部署MySQL內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker compose安裝es+kibana 8.12.2的詳細過程
因云平臺需要改造,es7升級為es8,所以記錄一下,es8需要開啟ssl認證,需要配置證書,全本帶你用docker安裝,便于后面es8的學習,這篇文章主要介紹了docker compose安裝es+kibana 8.12.2的詳細過程,感興趣的朋友跟隨小編一起看看吧2024-05-05
基于docker-compose構建Mongodb副本集的示例詳解
副本集是?MongoDB?高可用性和數據安全性策略的基礎,適用于對數據安全性和服務可用性有較高要求的場景,本文給大家介紹了如何基于docker-compose構建Mongodb副本集,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下2024-01-01

