You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Minikube中创建MySQL Deployment时遭遇CrashLoopBackOff错误求助

MySQL Pod在Minikube中出现CrashLoopBackOff错误的解决建议

我是Kubernetes新手,尝试在Minikube上通过Deployment.yaml文件创建MySQL Pod,但持续遇到CrashLoopBackOff错误。我计划将该Pod作为已运行的Flask应用的数据库,恳请各位提供解决建议。

相关配置文件

secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  mysql-root-password: bXlzcWw=

persistent-volume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  labels:
    type: local
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  hostPath:
    path: "/mnt/data"

persistent-volume-claim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  storageClassName: manual
  resources:
    requests:
      storage: 2Gi
  accessModes:
    - ReadWriteOnce

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
  labels:
    app: mysql-db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-db
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql-db
    spec:
      containers:
      - name: mysql
        image: mysql:latest
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            memory: "512Mi"
            cpu: "1500m"
        ports:
        - containerPort: 3306
          name: mysql
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql-secret
                key: mysql-root-password
        volumeMounts:
          - name: mysql-persistant-storage
            mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistant-storage
          persistentVolumeClaim:
            claimName: mysql-pvc

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  labels:
    app: mysql-db
spec:
  selector:
    app: mysql-db
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  type: LoadBalancer

kubectl describe pod <pod-name> 输出

Name:             mysql-deployment-744d6df885-lm2nw
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
Start Time:       Wed, 26 Oct 2022 22:36:27 +0600
Labels:           app=mysql-db
                  pod-template-hash=744d6df885
Annotations:      <none>
Status:           Running
IP:               172.17.0.4
IPs:
  IP:           172.17.0.4
Controlled By:  ReplicaSet/mysql-deployment-744d6df885
Containers:
  mysql:
    Container ID:   docker://d7ccb5efac0051851a54eb8bc8147be2271f213136fe2a20460243d0e4674035
    Image:          mysql:latest
    Image ID:       docker-pullable://mysql@sha256:06314a7a220f6043436cfd72fd9c7f174fd58ef69fe4b788625fa53be4ab66aa
    Port:           3306/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Wed, 26 Oct 2022 22:37:13 +0600
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Wed, 26 Oct 2022 22:36:44 +0600
      Finished:     Wed, 26 Oct 2022 22:36:46 +0600
    Ready:          True
    Restart Count:  3
    Limits:
      cpu:     1500m
      memory:  512Mi
    Requests:
      cpu:     1500m
      memory:  512Mi
    Environment:
      MYSQL_ROOT_PASSWORD:  <set to the key 'mysql-root-password' in secret 'mysql-secret'>  Optional: false
    Mounts:
      /var/lib/mysql from mysql-persistant-storage (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-h44lh (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  mysql-persistant-storage:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  mysql-pvc
    ReadOnly:   false
  kube-api-access-h44lh:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Guaranteed
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  47s                default-scheduler  Successfully assigned default/mysql-deployment-744d6df885-lm2nw to minikube
  Warning  BackOff    15s (x4 over 43s)  kubelet            Back-off restarting failed container
  Normal   Pulled     2s (x4 over 47s)   kubelet            Container image "mysql:latest" already present on machine
  Normal   Created    2s (x4 over 47s)   kubelet            Created container mysql
  Normal   Started    2s (x4 over 47s)   kubelet            Started container mysql

日志信息

2022-10-26 17:22:14+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
2022-10-26 17:22:14+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-10-26 17:22:14+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.31-1.el8 started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
2022-10-26T17:22:14.726596Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2022-10-26T17:22:14.727697Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 1
2022-10-26T17:22:14.732426Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-10-26T17:22:14.761436Z 1 [ERROR] [MY-012960] [InnoDB] Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files.
2022-10-26T17:22:15.248917Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2022-10-26T17:22:15.249090Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2022-10-26T17:22:15.249122Z 0 [ERROR] [MY-010119] [Server] Aborting
2022-10-26T17:22:15.249437Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.31)  MySQL Community Server - GPL.

解决建议

从日志错误Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files可知,核心问题是持久化存储中的MySQL数据文件损坏或未正常关闭导致的,按以下步骤修复:

1. 清理损坏的持久化数据

  • 进入Minikube节点:minikube ssh
  • 删除PV对应hostPath目录下的所有数据:sudo rm -rf /mnt/data/*
  • 退出Minikube:exit
  • 删除现有资源并重新创建:
    kubectl delete pod mysql-deployment-744d6df885-lm2nw
    kubectl delete pvc mysql-pvc
    kubectl delete pv mysql-pv
    kubectl apply -f persistent-volume.yaml
    kubectl apply -f persistent-volume-claim.yaml
    kubectl apply -f deployment.yaml
    

2. 修复存储目录权限(可选)

MySQL容器使用mysql用户运行,hostPath目录权限可能不匹配,提前设置权限:

minikube ssh
sudo mkdir -p /mnt/data
sudo chown -R 999:999 /mnt/data  # MySQL镜像中mysql用户的UID为999
exit

3. 指定具体MySQL镜像版本(可选)

mysql:latest会自动拉取最新版本,易引发兼容性问题,建议指定稳定版本,比如mysql:8.0.31,修改Deployment.yaml中的image字段即可。

4. 验证Secret密码正确性

解码Secret中的密码确认是否正确:echo "bXlzcWw=" | base64 --decode,正常应输出mysql。


内容的提问来源于stack exchange,提问作者Neha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:15:39