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

Minikube环境下MySQL与phpMyAdmin登录失败问题求助

解决Minikube中phpMyAdmin和MySQL登录失败问题

问题现象

登录MySQL或phpMyAdmin时持续出现权限错误:

bash-4.2# mysql -u root -p     
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

相关Deployment和Pod均处于正常运行状态:

sens@sens-k8s:~$ k get deployments
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
hello-minikube          1/1     1            1           9h
phpmyadmin-deployment   1/1     1            1           27m

sens-k8s:~$ k get pods -o wide
NAME                                     READY   STATUS    RESTARTS       AGE   IP            NODE       NOMINATED NODE   READINESS GATES
hello-minikube-77b6f68484-h5w7r          1/1     Running   2 (143m ago)   9h    10.244.0.35   minikube   <none>           <none>
mysql-pod                                1/1     Running   0              27m   10.244.0.57   minikube   <none>           <none>
phpmyadmin-deployment-5c65bc9df8-thdwd   1/1     Running   0              28m   10.244.0.56   minikube   <none>           <none>

问题根源

从提供的配置和Pod详情来看,存在4个关键错误:

  • 密码不匹配:mysql-pod硬编码的MYSQL_ROOT_PASSWORD为mypassword,但phpMyAdmin使用的Secret中密码是1234,两边密码不一致导致登录失败。
  • 缺少MySQL Service:phpMyAdmin配置的PMA_HOST是mysql-service,但当前没有创建对应Service,phpMyAdmin无法连接到MySQL Pod。
  • Ingress配置错误:Ingress中引用的Service名称是phpmyadmin,但实际创建的Service是phpmyadmin-service,导致路由失效。
  • 数据存储隐患:mysql-pod使用EmptyDir卷,Pod重启后数据会丢失,后续可能引发密码重置问题。

修复步骤

1. 统一MySQL密码并启用数据持久化

先确认Secret配置(已创建,密码为明文1234):

---
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  root-password: MTIzNA==  # 对应明文1234

创建PersistentVolumeClaim实现数据持久化,避免Pod重启丢失数据:

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

重新创建mysql-pod,注入Secret密码并挂载持久化卷:

apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
  labels:
    app: mysql  # 新增标签,用于Service匹配
spec:
  containers:
    - name: mysql
      image: mysql:5.7
      ports:
        - containerPort: 3306
      env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: root-password
      volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumes:
    - name: mysql-data
      persistentVolumeClaim:
        claimName: mysql-pvc

2. 创建MySQL Service

创建mysql-service,让phpMyAdmin通过服务名访问MySQL:

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  selector:
    app: mysql  # 匹配mysql-pod的标签
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306

3. 修正Ingress配置

将Ingress中的Service名称改为实际存在的phpmyadmin-service:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: phpmyadmin-http-ingress
spec:
  rules:
  - host: phpmyadmin.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: phpmyadmin-service
            port:
              name: http

4. 重新部署并验证

  1. 删除旧mysql-pod:
kubectl delete pod mysql-pod
  1. 应用所有配置:
kubectl apply -f secret.yml
kubectl apply -f mysql-pvc.yml
kubectl apply -f mysql-pod.yml
kubectl apply -f mysql-service.yml
kubectl apply -f phpmyadmin-deployment.yml
kubectl apply -f phpmyadmin-service.yml
kubectl apply -f ingress.yml
  1. 验证登录:
    • 进入mysql-pod内部登录:
      kubectl exec -it mysql-pod -- mysql -u root -p
      
      输入密码1234即可成功登录。
    • 通过phpMyAdmin登录:
      将phpmyadmin.example.com指向Minikube节点IP(执行minikube ip查看),访问该域名后用root和1234登录。

补充说明

若Minikube未启用Ingress插件,需先执行:minikube addons enable ingress

phpMyAdmin登录界面示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:10:25