用 Docker 安裝并啟動 MySQL:從零到實戰的完整指南
MySQL 是目前最流行的關系型數據庫之一,廣泛應用于各類應用系統中。使用 Docker 部署 MySQL 可以極大簡化環境配置,保證開發、測試和生產環境的一致性。本文將詳細介紹如何使用 Docker 安裝、配置和管理 MySQL 容器,適合初學者快速上手。
一、準備工作:安裝 Docker 環境
在開始之前,請確保你的系統已經安裝了 Docker。如果尚未安裝,可以按照以下步驟操作:
1. 安裝 Docker(以 Ubuntu 為例)
bash
# 更新系統包索引
sudo apt-get update# 安裝必要的依賴包
sudo apt-get install -y ca-certificates curl gnupg lsb-release# 添加Docker官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 設置Docker穩定版倉庫
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安裝Docker引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io# 啟動Docker服務并設置開機自啟
sudo systemctl start docker
sudo systemctl enable docker# 驗證Docker是否安裝成功
sudo docker --version
2. 安裝 Docker(以 CentOS 為例)
bash
# 更新系統包
sudo yum update -y# 安裝Docker依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 添加Docker軟件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安裝Docker引擎
sudo yum install -y docker-ce docker-ce-cli containerd.io# 啟動Docker服務并設置開機自啟
sudo systemctl start docker
sudo systemctl enable docker# 驗證Docker是否安裝成功
sudo docker --version
3. 非 root 用戶配置(可選)
為了避免每次使用docker
命令都需要sudo
權限,可以將當前用戶添加到docker
用戶組:
bash
sudo usermod -aG docker $USER
# 生效配置(需要重新登錄)
newgrp docker
二、Docker 安裝 MySQL:兩種常用方式
方式 1:快速啟動默認配置的 MySQL
如果只需要臨時使用 MySQL 進行測試,最簡單的方式是直接運行官方鏡像:
bash
docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:latest
參數說明:
--name mysql-test
:給容器命名為mysql-test
-e MYSQL_ROOT_PASSWORD=root
:設置 root 用戶密碼為 root-p 3306:3306
:將主機的 3306 端口映射到容器的 3306 端口-d
:后臺運行容器mysql:latest
:使用最新版本的 MySQL 官方鏡像
方式 2:自定義配置啟動 MySQL(推薦生產環境)
對于實際生產環境,我們需要自定義 MySQL 配置,并確保數據持久化到主機,避免容器刪除后數據丟失。
步驟 1:創建配置文件和數據目錄
bash
# 創建存放MySQL配置、數據和日志的目錄
mkdir -p /opt/mysql/{conf,data,logs}# 設置目錄權限(確保容器內用戶可以讀寫)
sudo chmod -R 777 /opt/mysql
步驟 2:編寫 MySQL 配置文件
創建并編輯 MySQL 配置文件:
bash
vi /opt/mysql/conf/my.cnf
添加以下基礎配置(可根據需求調整):
ini
[mysqld]
# 數據庫默認字符集
character-set-server=utf8mb4
# 數據庫字符集對應一些排序等規則,注意要和character-set-server對應
collation-server=utf8mb4_unicode_ci
# 服務端口號
port=3306
# 數據庫存儲路徑(容器內路徑)
datadir=/var/lib/mysql
# 日志文件路徑(容器內路徑)
log-error=/var/log/mysql/error.log
# 允許最大連接數
max_connections=1000
# SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[client]
# 客戶端默認字符集
default-character-set=utf8mb4[mysql]
# MySQL客戶端默認字符集
default-character-set=utf8mb4
步驟 3:啟動 MySQL 容器
bash
docker run -d \--name mysql \--restart=always \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=your_secure_password \-e TZ=Asia/Shanghai \-v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \-v /opt/mysql/data:/var/lib/mysql \-v /opt/mysql/logs:/var/log/mysql \mysql:8.0
參數詳解:
--name mysql
:容器名稱為 mysql--restart=always
:容器退出時自動重啟-p 3306:3306
:端口映射,主機端口:容器端口-e MYSQL_ROOT_PASSWORD=your_secure_password
:設置 root 用戶密碼-e TZ=Asia/Shanghai
:設置時區為上海-v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
:掛載配置文件-v /opt/mysql/data:/var/lib/mysql
:掛載數據目錄,實現數據持久化-v /opt/mysql/logs:/var/log/mysql
:掛載日志目錄mysql:8.0
:使用 MySQL 8.0 版本(生產環境建議指定具體版本)
三、驗證 MySQL 容器是否正常運行
1. 查看容器狀態
bash
# 查看容器運行狀態
docker ps | grep mysql# 查看容器詳細日志
docker logs mysql
如果看到類似ready for connections
的日志,說明 MySQL 啟動成功。
2. 連接 MySQL 進行測試
bash
# 進入MySQL容器
docker exec -it mysql mysql -u root -p# 輸入密碼后,測試創建數據庫和表
mysql> CREATE DATABASE testdb;
mysql> USE testdb;
mysql> CREATE TABLE users (id INT, name VARCHAR(50));
mysql> INSERT INTO users VALUES (1, 'Docker MySQL');
mysql> SELECT * FROM users;
如果能正常執行以上 SQL 命令,說明 MySQL 工作正常。
四、MySQL 容器管理常用命令
1. 基本操作
bash
# 啟動已停止的MySQL容器
docker start mysql# 停止運行中的MySQL容器
docker stop mysql# 重啟MySQL容器
docker restart mysql# 查看容器詳細信息
docker inspect mysql
2. 配置文件更新
當需要修改 MySQL 配置時,只需更新主機上的/opt/mysql/conf/my.cnf
文件,然后重啟容器即可:
bash
# 編輯配置文件
vi /opt/mysql/conf/my.cnf# 重啟容器使配置生效
docker restart mysql
3. 升級 MySQL 版本
bash
# 1. 停止并備份當前容器數據(關鍵步驟)
docker stop mysql
sudo cp -r /opt/mysql/data /opt/mysql/data_backup# 2. 刪除當前容器
docker rm mysql# 3. 拉取新版本鏡像
docker pull mysql:8.0.33 # 替換為目標版本# 4. 使用相同命令啟動新容器
docker run -d \--name mysql \--restart=always \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=your_secure_password \-e TZ=Asia/Shanghai \-v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \-v /opt/mysql/data:/var/lib/mysql \-v /opt/mysql/logs:/var/log/mysql \mysql:8.0.33 # 使用新拉取的版本
五、安全最佳實踐
- 設置強密碼:務必為 root 用戶設置復雜密碼,避免使用簡單密碼
- 限制網絡訪問:生產環境建議通過防火墻限制 3306 端口的訪問來源
- 使用固定版本鏡像:避免使用
latest
標簽,應指定具體版本(如mysql:8.0.33
) - 定期備份數據:雖然數據已持久化到主機,仍建議定期備份
/opt/mysql/data
目錄 - 最小權限原則:運行容器時可考慮添加
--user
參數指定非 root 用戶運行 - 啟用 SSL 連接:生產環境應配置 MySQL 使用 SSL 加密客戶端連接
- 定期更新鏡像:及時更新 MySQL 鏡像以獲取安全補丁
六、常見問題解決
1. 容器啟動后立即退出
檢查日志定位問題:
bash
docker logs mysql
常見原因:配置文件錯誤、目錄權限不足(可嘗試調整/opt/mysql
目錄權限)
2. 無法遠程連接 MySQL
- 檢查主機防火墻是否開放 3306 端口
- 確認 MySQL 用戶是否允許遠程連接(默認 root 用戶只允許本地連接):
sql
-- 進入MySQL后執行 use mysql; update user set host = '%' where user = 'root'; flush privileges;
3. 數據持久化失敗
- 確認掛載目錄權限正確
- 檢查日志文件是否有相關錯誤信息
- 確保啟動命令中的數據目錄掛載正確
4. 中文亂碼問題
- 確保配置文件中已正確設置
character-set-server=utf8mb4
- 新建數據庫和表時指定字符集:
sql
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
總結
通過 Docker 安裝和管理 MySQL 可以顯著簡化部署流程,提高環境一致性。本文介紹的方法既適用于開發測試環境,也可通過適當調整配置應用于生產環境。核心在于理解數據持久化的實現方式和容器與主機的交互機制,以便更好地管理和維護 MySQL 服務。