Laravel 13在macOS连接MySQL最常错三处:未启用pdo_mysql扩展、DB_HOST误写localhost(应为127.0.0.1)、socket路径或权限不匹配;须执行php artisan config:clear清缓存验证。

确认 PHP 已启用 pdo_mysql 扩展
Laravel 13 要求 PHP ≥ 8.2,且 pdo_mysql 必须启用——仅装了 mysql 或 mysqli 不够。
- 运行
php -m | grep pdo,确保输出含pdo和pdo_mysql - 若缺失,用 Homebrew 安装 PHP 时默认已带;若用 MacPorts 或自编译,需确认 configure 时加了
--with-pdo-mysql - 常见错误:
Class 'PDO' not found或Driver [mysql] not supported,基本都源于此
.env 中 DB_HOST 别写 localhost(Mac 上大概率失败)
macOS 的 MySQL(尤其是通过 Homebrew 安装的 mysql@8)默认监听 127.0.0.1,但不响应 localhost —— 因为后者会走 Unix socket,而 Laravel 默认不配 unix_socket 路径。
- ✅ 正确写法:
DB_HOST=127.0.0.1 - ❌ 错误写法:
DB_HOST=localhost(除非你显式配了DB_SOCKET=/tmp/mysql.sock) - 验证方式:终端执行
mysql -h 127.0.0.1 -u your_user -p能连上,但mysql -h localhost -u ...报错,则必须用 IP
config/database.php 的 mysql 配置要匹配实际 socket 路径(仅当你坚持用 localhost 时)
如果你非要用 localhost(比如某些 Docker 场景),就必须填对 unix_socket,否则 Laravel 会尝试 TCP 连接却失败。
- 查当前 socket 路径:
mysqladmin variables | grep socket,常见值是/tmp/mysql.sock或/opt/homebrew/var/mysql/mysql.sock(Apple Silicon) - 在
config/database.php的mysql连接里补全:'unix_socket' => env('DB_SOCKET', '/opt/homebrew/var/mysql/mysql.sock') - 对应 .env 加一行:
DB_SOCKET=/opt/homebrew/var/mysql/mysql.sock - 不配 socket 却写
localhost→ 报错SQLSTATE[HY000] [2002] No such file or directory
测试连接前务必清缓存
Laravel 13 默认启用配置缓存,改了 .env 不清缓存等于没改。
- 执行
php artisan config:clear(不是cache:clear) - 再跑
php artisan tinker,输入DB::connection()->getPdo();—— 无异常即通 - 如果报
Connection refused,优先检查 MySQL 是否运行:brew services list | grep mysql,没运行就brew services start mysql
localhost 和 127.0.0.1 在 macOS 的语义区别,以及 socket 文件位置随 Homebrew 架构(Intel/Apple Silicon)变化。


















