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

AKS上phpMyAdmin连接Azure MariaDB报No such file or directory错误

故障根因

报错mysqli::real_connect(): (HY000/2002): No such file or directory的核心原因是自定义的phpMyAdmin配置完全没有被程序加载,程序使用默认配置尝试连接本地MySQL服务:默认配置下host为localhost时,mysqli扩展会优先查找本地Unix Socket文件建立连接,而容器内没有运行MySQL服务,自然不存在对应的socket文件,最终抛出文件不存在的错误。
配置未生效及后续潜在问题由3个配置错误共同导致:

  • ConfigMap命名空间不匹配:存储SSL证书的ssl-cert ConfigMap被部署在oneup命名空间,但phpMyAdmin的Deployment、Service等资源全部部署在pma命名空间,Kubernetes不支持跨命名空间直接挂载ConfigMap,该卷会挂载失败。
  • 配置目录挂载覆盖原有文件:将pma-cfg卷直接挂载到/etc/phpmyadmin/目录,且仅指定了config.user.inc.php一个挂载项,ConfigMap的挂载机制会清空该目录下所有原有文件,仅保留挂载的单个文件,导致镜像内置的phpMyAdmin基础配置文件丢失。
  • 自定义配置路径不被识别:官方phpMyAdmin镜像默认不会自动加载config.user.inc.php文件,除非主配置文件中显式写了加载逻辑,直接挂载该文件不会被程序识别读取。

修复步骤

1. 修正SSL证书ConfigMap的命名空间

把ssl-cert ConfigMap的命名空间从oneup改为pma,和phpMyAdmin工作负载处于同一命名空间:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ssl-cert
  namespace: pma
  labels:
    app: phpmyadmin
data:
  ssl-cert: |
    -----BEGIN CERTIFICATE-----
    # 填写完整的BaltimoreCyberTrustRoot.crt内容,不要留注释占位
    -----END CERTIFICATE-----

注意:证书内容要填写完整,不要保留# truncated BaltimoreCyberTrustRoot.crt.pem这类注释占位符,否则证书校验会失败。

2. 调整配置挂载方式,避免覆盖整个配置目录

修改Deployment中的卷和挂载配置,改为单文件挂载,避免清空原有配置目录的内容。官方phpMyAdmin镜像会自动加载/etc/phpmyadmin/conf.d/目录下所有.php后缀的配置文件,把自定义配置放到这个目录下即可被自动识别。
修改后的Deployment核心配置参考如下:

containers:
        - name: pma
          image: phpmyadmin/phpmyadmin
          ports:
            - containerPort: 80
              name: pma
          volumeMounts:
            # 单文件挂载到conf.d目录,不影响其他原有配置文件
            - name: pma-cfg
              mountPath: /etc/phpmyadmin/conf.d/custom-config.php
              subPath: custom-config.php
            # 证书挂载保持路径不变
            - name: ssl-cert
              mountPath: /etc/phpmyadmin/ssl/
      volumes:
        - name: pma-cfg
          configMap:
            name: pma-cfg
            items:
              - key: config-user-inc
                path: custom-config.php
        - name: ssl-cert
          configMap:
            name: ssl-cert
            items:
              - key: ssl-cert
                path: BaltimoreCyberTrustRoot.crt.pem

3. 微调phpMyAdmin配置,强制走TCP连接

为了避免程序默认走socket连接,同时修复相对路径导致的证书找不到问题,调整自定义配置内容:

<?php
  $i = 0;
  $i++;
  $cfg['Servers'][$i]['auth_type'] = 'cookie';
  $cfg['Servers'][$i]['host'] = 'my-database-12345.mariadb.database.azure.com';
  $cfg['Servers'][$i]['port'] = 3306; // 改为数字类型,避免字符串解析问题
  $cfg['Servers'][$i]['socket'] = ''; // 显式指定socket为空,强制走TCP连接
  $cfg['Servers'][$i]['ssl'] = true;
  $cfg['Servers'][$i]['ssl_ca'] = '/etc/phpmyadmin/ssl/BaltimoreCyberTrustRoot.crt.pem'; // 改为绝对路径,避免相对路径解析错误
  $cfg['Servers'][$i]['ssl_verify'] = false;

4. 重新部署验证

删除原有故障Pod和错误配置的ConfigMap,重新应用修正后的YAML,等Pod启动后即可尝试登录。
部署完成后可进容器做快速校验:

  • 执行ls /etc/phpmyadmin/conf.d/确认custom-config.php文件存在
  • 执行ls /etc/phpmyadmin/ssl/确认证书文件存在
  • 可直接在容器内用PHP CLI测试数据库连通性,排除页面侧干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:15:48