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

Kubernetes环境下WordPress与MySQL连接失败求助

WordPress无法连接MySQL数据库排查方案

问题概述

已通过YAML部署WordPress和MySQL Pod,Pod创建状态正常,通过kubectl port-forward wordpress 8080:80可在浏览器访问WordPress页面,但页面始终提示**"Error establishing a database connection"**。已验证WordPress Pod可ping通MySQL,但数据库连接失败。

部署命令:kubectl apply -f "filename.yaml"

部署配置文件

wordpress.yaml

apiVersion: v1
kind: Pod
metadata:
  name: wordpress
spec:
  containers:
  - name: app
    image: wordpress:latest
    env:
    - name: "WORDPRESS_DB_HOST"
      value: "mysql-service"  
    - name: "WORDPRESS_DB_NAME"
      value: "MysqlDB"
    - name: "WORDPRESS_DB_USER"
      value: "admin"
    - name: "WORDPRESS_DB_PASSWORD"
      value: "Test"
    ports:
    - containerPort: 80

database.yaml

apiVersion: v1
kind: Pod
metadata:
  name: database
  labels: 
    name: mysql-pod
spec:
  containers:
  - name: database
    image: mysql:latest
    env:
      - name: "MYSQL_USER"
        value: "admin"
      - name: "MYSQL_PASSWORD"
        value: "Test"
      - name: "MYSQL_DATABASE"
        value: "MysqlDB"
      - name: "MYSQL_ROOT_PASSWORD"
        value: "TFBern_3013"  
    ports:
    - containerPort: 3306
--- # Mysql Service definiert
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  ports:
    - port: 3306
  selector:
    name: mysql-pod

排查步骤与修复方案

1. 修复MySQL用户连接权限

默认情况下,MYSQL_USER创建的用户仅允许从localhost连接,而WordPress是通过集群内部IP访问MySQL,需授权用户从任意IP连接:

  • 进入MySQL Pod:
    kubectl exec -it database -- mysql -uroot -pTFBern_3013
    
  • 执行授权SQL:
    GRANT ALL PRIVILEGES ON MysqlDB.* TO 'admin'@'%' IDENTIFIED BY 'Test';
    FLUSH PRIVILEGES;
    

2. 验证端口连通性

ping通仅说明网络可达,需确认3306端口可访问:

  • 在WordPress Pod内执行端口测试:
    kubectl exec -it wordpress -- telnet mysql-service 3306
    

若连接失败,检查MySQL容器是否正常监听3306端口(查看MySQL日志),或Service selector是否匹配(当前配置中Pod标签name: mysql-pod与Service selector一致,此部分无问题)。

3. 查看容器日志定位细节

  • 查看WordPress日志:
    kubectl logs wordpress
    
  • 查看MySQL日志:
    kubectl logs database
    

日志会给出连接失败的具体原因,如权限拒绝、数据库未创建等。

4. 优化建议:使用Deployment替代独立Pod

当前使用的独立Pod无自愈能力,建议改为Deployment,确保Pod故障时自动重建:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: app
        image: wordpress:latest
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql-service
        - name: WORDPRESS_DB_NAME
          value: MysqlDB
        - name: WORDPRESS_DB_USER
          value: admin
        - name: WORDPRESS_DB_PASSWORD
          value: Test
        ports:
        - containerPort: 80

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:25:03