Bedrock分支站点页面报数据库错误但WP-CLI可连接的排查求助
排查Bedrock + Valet下Web请求数据库连接失败的方向
核对Web与CLI的PHP配置差异
- 先确认Web环境和CLI使用的PHP版本是否一致:在Web页面输出
phpinfo()查看版本,CLI执行php -v对比,Valet可能同时安装多个PHP版本,Web和CLI可能用了不同的版本。 - 检查两者的php.ini配置:重点看MySQL/MariaDB相关的参数,比如
mysqli.default_socket、pdo_mysql.default_socket、max_allowed_packet,尤其是socket路径,Web环境的PHP如果配置了错误的socket路径,会导致连接失败且MariaDB日志无记录(因为请求没到达数据库)。 - 对比两者的PHP扩展加载情况:CLI执行
php -m | grep mysql,Web在phpinfo()里查看mysqli、pdo_mysql扩展是否启用,确保Web环境的PHP加载了正确的数据库驱动。
- 先确认Web环境和CLI使用的PHP版本是否一致:在Web页面输出
验证Bedrock的数据库配置加载逻辑
- 在Web页面和CLI分别输出数据库配置参数:Web端写个简单脚本输出
var_dump(getenv('DB_HOST'), getenv('DB_USER'), getenv('DB_NAME')),CLI执行wp eval 'var_dump(DB_HOST, DB_USER, DB_NAME);',对比两者的配置是否一致,确认Web环境是否正确读取了.env文件。 - 检查Valet的Nginx配置:查看站点对应的Nginx配置文件(路径一般是
~/.config/valet/Nginx/[你的站点域名].test),确认是否通过fastcgi_param传递了环境变量,比如是否有fastcgi_param DB_HOST $env_DB_HOST;这类配置,避免Nginx覆盖了.env的变量。 - 尝试手动指定DB连接方式:把
.env里的DB_HOST从localhost改成127.0.0.1,强制使用TCP连接而非socket,排查socket路径配置错误的问题。
- 在Web页面和CLI分别输出数据库配置参数:Web端写个简单脚本输出
直接测试Web环境的数据库连接
- 在项目根目录创建
test-db.php脚本,用原生mysqli或PDO直接连接数据库,获取具体错误信息:<?php // 从.env读取配置,或直接写死测试 $host = getenv('DB_HOST') ?: '127.0.0.1'; $user = getenv('DB_USER') ?: 'your-db-user'; $pass = getenv('DB_PASSWORD') ?: 'your-db-pass'; $dbname = getenv('DB_NAME') ?: 'your-db-name'; // mysqli测试 $conn = mysqli_connect($host, $user, $pass, $dbname); if (!$conn) { die("连接失败: " . mysqli_connect_error()); } echo "数据库连接成功"; mysqli_close($conn); - 访问这个脚本,查看具体错误,WordPress的默认错误提示通常比较模糊,原生连接测试能暴露更细节的问题,比如驱动缺失、权限不足等。
- 在项目根目录创建
排查MariaDB的权限与连接限制
- 检查数据库用户的主机权限:登录MariaDB执行
SELECT user, host FROM mysql.user;,确认你的数据库用户是否允许Web进程的用户(比如_www、nginx)从localhost或127.0.0.1连接。 - 验证用户权限:执行
GRANT ALL PRIVILEGES ONyour-db-name.* TO 'your-db-user'@'localhost';(或@'127.0.0.1'),然后FLUSH PRIVILEGES;,排除权限不足的问题。
- 检查数据库用户的主机权限:登录MariaDB执行
检查Web服务器与Valet的日志
- 查看Nginx错误日志:路径一般是
/usr/local/var/log/nginx/error.log,里面可能记录了Web请求时PHP的错误信息,比如驱动加载失败、配置读取错误等。 - 查看PHP错误日志:在phpinfo()页面找到
error_log对应的路径,查看里面的详细错误,这是定位Web环境问题的关键,因为MariaDB日志没记录说明连接请求没到达数据库,问题出在PHP或Web服务器层面。
- 查看Nginx错误日志:路径一般是
内容的提问来源于stack exchange,提问作者constantijn van hartesveldt
相关产品推荐
相关产品推荐

