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
相关产品推荐
相关产品推荐

