內容概述
MySQL Operator 是由 Oracle 官方開發的 Kubernetes Operator,專為管理 MySQL InnoDB Cluster 設計。它能自動化部署、升級、備份與監控等工作,讓開發者與系統管理員能更輕鬆地在 Kubernetes 上運行高可用的 MySQL 叢集。
應用場景
- 雲原生應用:需要在 Kubernetes 上部署可擴展且高可用的 MySQL 資料庫。
- DevOps 團隊:希望透過 CI/CD 流程自動化資料庫部署與管理。
- 多租戶平台:需要為不同租戶提供獨立且可管理的 MySQL 叢集。
技術特點
- 完整生命週期管理:自動處理部署、升級、備份與恢復等任務。
- 支援 InnoDB Cluster:利用 MySQL Group Replication 提供高可用性。
- 整合 MySQL Router:簡化應用程式的連線管理。
- 自動 TLS 憑證管理:支援自簽憑證,提升安全性。
- 可擴展性:透過 Helm 或 YAML 自訂部署設定。
其他整合
- Helm Chart:官方提供 Helm Chart,簡化部署流程。
- 私有映像庫支援:可從私有映像庫部署 Operator 與叢集。
- 備份與還原:支援備份 MySQL 資料並從備份中還原。
安裝步驟
本文查核時 MySQL Operator 的最新版本標籤為 26.10.0-2.3.1,以下指令皆以此版本為準。
使用 kubectl 安裝
1. 部署 CRDs(Custom Resource Definitions):
kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/26.10.0-2.3.1/deploy/deploy-crds.yaml2. 部署 MySQL Operator:
kubectl apply -f https://raw.githubusercontent.com/mysql/mysql-operator/26.10.0-2.3.1/deploy/deploy-operator.yaml3. 確認 Operator 是否運行:
kubectl get deployment -n mysql-operator mysql-operator使用 Helm 安裝
1. 新增 Helm 倉庫並更新:
helm repo add mysql-operator https://mysql.github.io/mysql-operator/
helm repo update2. 安裝 MySQL Operator:
helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace注意:新版 Operator 在第一次啟動後會固定其管理範圍(全域或指定命名空間),之後無法直接修改,需要移除後重新安裝。安裝前請先決定 deployment.namespaces 等設定。
存取和操作
建立 MySQL InnoDB Cluster
1. 建立包含 root 使用者憑證的 Secret:
kubectl create secret generic mypwds \
--from-literal=rootUser=root \
--from-literal=rootHost=% \
--from-literal=rootPassword="sakila"範例密碼 sakila 取自官方文件,正式環境請務必改成高強度密碼。
2. 建立 InnoDBCluster 資源(mycluster.yaml):
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mycluster
spec:
secretName: mypwds
tlsUseSelfSigned: true
instances: 3
router:
instances: 13. 部署叢集:
kubectl apply -f mycluster.yaml4. 監控叢集狀態:
kubectl get innodbcluster --watch狀態從 PENDING 變為 ONLINE,且 ONLINE 數量為 3,代表 3 個 MySQL 實例與 1 個 MySQL Router 都已就緒。
連接至 MySQL 叢集
Operator 會自動建立 Kubernetes Service,供應用程式連接:
kubectl get service mycluster您可以使用 kubectl port-forward 搭配 MySQL 用戶端進行連接:
kubectl port-forward service/mycluster mysql
Forwarding from 127.0.0.1:3306 -> 6446
Forwarding from [::1]:3306 -> 6446
mysql -h127.0.0.1 -P3306 -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
...小技巧
- 備份與還原:參考官方手冊的「Handling MySQL Backups」章節設定備份,並定期測試還原流程。
- 自訂設定:透過修改 Helm values.yaml 或 YAML 檔案,自訂叢集設定。
- 查看日誌:依官方手冊的「Viewing Logs」章節查看 Operator 與 MySQL 實例的日誌,及早發現問題。
- 私有映像庫:內網環境可將映像檔複製到私有映像庫後再部署。
適用規模與維運成本
- 適用規模:已經有穩定運作的 Kubernetes 叢集,且需要高可用 MySQL 的團隊。InnoDB Cluster 範例需要 3 個 MySQL 實例加上 MySQL Router,資源需求明顯高於單一 MySQL。
- 儲存:MySQL 實例的資料存放在 PersistentVolume,叢集需要能提供可靠的持久化儲存;儲存的效能與可靠性直接影響資料庫。
- 維運成本:需要同時熟悉 Kubernetes 與 MySQL Group Replication;升級 Operator 與 MySQL、備份還原演練、故障排除都需要投入人力。
- 替代方案:小型專案或測試環境,單一 MySQL 容器或雲端代管資料庫(如各家雲端的託管 MySQL 服務)通常更簡單;是否值得自建,取決於團隊的維運能力。
教學影片
影片來源:MySQL/YouTube
參考連結
成本與風險摘要
- 適用對象與規模:有 Kubernetes 維運經驗、需要高可用 MySQL 的團隊。
- 成本(硬體、訂閱、授權):MySQL Operator 採 UPL 1.0 授權,免費;主要成本是 3 個以上 MySQL 實例的運算資源與持久化儲存。
- 維護時間:中到高;需要規劃升級、備份與還原演練。
- 資安注意事項:不要使用範例密碼;root 帳號的 rootHost
%允許任意來源連線,正式環境應限制來源並另建應用程式專用帳號;資料庫 Service 不要直接對外開放。 - 常見誤區:以為有 Operator 就不需要備份;沒有測試過還原流程;在沒有可靠持久化儲存的叢集上部署資料庫。
- 不建議使用的情況:小型網站或單機環境、團隊沒有 Kubernetes 維運人力時。
- 測試日期與版本號:資料查核日期:2026-10-28;依官方 README 對照 MySQL Operator 26.10.0-2.3.1(範例為作者早期實作,本次未重新實機測試)。
