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. 重新部署并验证
- 删除旧mysql-pod:
kubectl delete pod mysql-pod
- 应用所有配置:
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
- 验证登录:
- 进入mysql-pod内部登录:
输入密码kubectl exec -it mysql-pod -- mysql -u root -p1234即可成功登录。 - 通过phpMyAdmin登录:
将phpmyadmin.example.com指向Minikube节点IP(执行minikube ip查看),访问该域名后用root和1234登录。
- 进入mysql-pod内部登录:
补充说明
若Minikube未启用Ingress插件,需先执行:minikube addons enable ingress

内容的提问来源于stack exchange,提问作者sens31
相关产品推荐
相关产品推荐

