首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Docker 部署 Percona Server 完整指南:MySQL 與 MongoDB 實例運行實戰

     編輯:MySQL 綜合教學

前言

Percona 官方提供經過優化的 Docker 鏡像,支援 Percona Server for MySQL 與 Percona Server for MongoDB,並內建多種存儲引擎選項。本文系統總結鏡像獲取、容器啟動、環境變量配置、數據持久化、端口映射、自定義參數與配置文件掛載等全方位實戰操作。

一、鏡像來源說明

  • 官方鏡像倉庫:https://hub.docker.com/r/percona/
  • MySQL 版本標籤:latest、5.6、5.6.28、5.6.27 等
  • MongoDB 版本:percona/percona-server-mongodb:latest 等
  • 狀態提示:官方鏡像處於實驗階段,生產環境建議充分測試後再上線。

二、Percona Server for MySQL 部署

2.1 基礎啟動命令

docker run --name percona-mysql \
  -e MYSQL_ROOT_PASSWORD=StrongPass123 \
  -d percona/percona-server:5.7
  • --name:容器名稱
  • -e MYSQL_ROOT_PASSWORD:設置 root 密碼(必填,除非使用隨機/空密碼)
  • -d:後台運行

2.2 應用容器連接 MySQL 容器

docker run --name app-container \
  --link percona-mysql:mysql \
  -d your-app-image

應用內使用主機名 mysql、端口 3306 連接。

2.3 臨時客戶端連接驗證

docker run -it --rm \
  --link percona-mysql:mysql \
  percona/percona-server:5.7 \
  mysql -h mysql -P 3306 -uroot -pStrongPass123

三、Percona Server for MongoDB 部署

3.1 默認 WiredTiger 引擎

docker run --name percona-mongo -d percona/percona-server-mongodb:latest

3.2 指定 RocksDB 引擎

docker run --name percona-mongo-rocks \
  -d percona/percona-server-mongodb:latest \
  --storageEngine=RocksDB

3.3 指定 PerconaFT 引擎

docker run --name percona-mongo-ft \
  -d percona/percona-server-mongodb:latest \
  --storageEngine=PerconaFT

四、核心環境變量詳解

變量名說明推薦值/備註
MYSQL_ROOT_PASSWORD root 用戶密碼 生產環境必須設置強密碼
MYSQL_RANDOM_ROOT_PASSWORD yes 時生成隨機密碼,輸出至容器日誌 配合 docker logs container-name 獲取,適合自動化部署
MYSQL_ONETIME_PASSWORD yes 時 root 密碼過期,首次登錄必須修改 需 MySQL 5.6+ 支援,提升安全性
MYSQL_DATABASE 啟動時自動創建的數據庫 若同時設置 MYSQL_USER/MYSQL_PASSWORD,該用戶將擁有該庫所有權限
MYSQL_USER / MYSQL_PASSWORD 創建普通用戶並授權給 MYSQL_DATABASE 不可用於創建 root 用戶
MYSQL_ALLOW_EMPTY_PASSWORD yes 允許 root 空密碼 極不推薦,僅限測試環境

五、安全最佳實踐

  1. 優先使用隨機密碼:-e MYSQL_RANDOM_ROOT_PASSWORD=yes,避免密碼硬編碼在鏡像或腳本中。
  2. 啟用一次性密碼:-e MYSQL_ONETIME_PASSWORD=yes,強制首次登錄修改密碼。
  3. 避免環境變量洩露:不要在 Dockerfile 中 ENV MYSQL_ROOT_PASSWORD=...,改用 docker run -e 或 Docker Secrets/K8s Secrets 傳遞。

六、數據持久化策略

6.1 Docker 管理卷(默認)

docker run --name percona-mysql \
  -e MYSQL_ROOT_PASSWORD=StrongPass123 \
  -d percona/percona-server:5.7

數據存放於 /var/lib/docker/volumes/...,受存儲驅動影響,性能可能受限。

6.2 掛載主機目錄(推薦生產)

# 1. 主機建立目錄並設置權限
mkdir -p /data/percona/mysql
chcon -Rt svirt_sandbox_file_t /data/percona/mysql  # SELinux 環境必須

# 2. 啟動容器掛載
docker run --name percona-mysql \
  -v /data/percona/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=StrongPass123 \
  -d percona/percona-server:5.7
  • 優勢:數據可見、可備份、可被宿主機工具直接訪問、避開存儲驅動性能損耗。
  • 注意:若目錄已有數據,MYSQL_ROOT_PASSWORD 等初始化環境變量將失效。

七、端口映射

docker run --name percona-mysql \
  -p 6603:3306 \
  -e MYSQL_ROOT_PASSWORD=StrongPass123 \
  -d percona/percona-server:5.7

宿主機 6603 映射容器 3306,外部連接使用 host_ip:6603。

八、傳遞 MySQL 啟動參數

docker run --name percona-mysql \
  -e MYSQL_ROOT_PASSWORD=StrongPass123 \
  -d percona/percona-server:5.7 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_general_ci \
  --max-connections=5000 \
  --innodb-buffer-pool-size=2G

docker run 末尾的參數將直接透傳給容器內的 mysqld 進程。

九、自定義配置文件掛載

# 1. 準備宿主機配置文件
mkdir -p /etc/percona
cat > /etc/percona/my.cnf <<'EOF'
[mysqld]
innodb_buffer_pool_size=4G
max_connections=10000
log_bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
EOF

# 2. 掛載至容器默認讀取路徑
docker run --name percona-mysql \
  -v /etc/percona/my.cnf:/etc/my.cnf \
  -v /data/percona/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=StrongPass123 \
  -d percona/percona-server:5.7

容器啟動時將讀取掛載的 /etc/my.cnf,實現配置與數據完全外部化管理。

十、常見問題排查

  • 容器啟動即退出:查看 docker logs container-name,常見為權限問題(掛載目錄無寫權限)或配置語法錯誤。
  • 連接被拒絕:確認端口映射、防火牆、MySQL bind-address 設置(配置文件中設為 0.0.0.0)。
  • 數據目錄初始化失敗:若掛載非空目錄,需確保目錄擁有者為 mysql:mysql(UID 999)或容器以 --user 999 運行。
  • 時區不一致:掛載宿主機 /etc/localtime:/etc/localtime:ro 或設置 -e TZ=Asia/Shanghai。

十一、總結

Percona 官方 Docker 鏡像提供了開箱即用的高性能 MySQL/MongoDB 實例,配合環境變量、數據卷掛載、參數透傳與配置文件外掛,可滿足從開發測試到生產部署的全生命周期需求。關鍵生產建議:掛載主機目錄持久化數據、使用隨機/一次性密碼、外部化配置文件、啟用 GTID 與 ROW 格式 Binlog。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved