laravel数据库配置在.env文件,需修改db_connection、db_host、db_port、db_database四键;“connection refused”主因是服务未启动、docker端口未映射或用户授权不足;验证用php artisan tinker执行db::connection()->getpdo();mysql 8需处理caching_sha2_password认证问题。

数据库配置文件在哪、改哪些键
Laravel 的数据库配置集中在 .env 文件里,不是 config/database.php —— 后者只是读取环境变量的中转站,直接改它没用。关键要核对四组值:DB_CONNECTION(比如 mysql)、DB_HOST(别写成 localhost 在 Docker 里常连不上,换成 127.0.0.1 或容器名)、DB_PORT(MySQL 默认是 3306,但 MAMP/MAMP Pro 可能是 8889)、DB_DATABASE(库名必须已存在,Laravel 不自动创建)。
“Connection refused” 错误的三个高频原因
这个错误不是 Laravel 的错,是 PHP 根本没连上数据库服务本身。常见情况有:
-
mysqld进程根本没启动(Mac 上用brew services list看,Linux 用systemctl status mysql) - Docker 容器没运行或端口没暴露(检查
docker ps,确认-p 3306:3306存在) - 数据库用户没授权从当前 host 连接(比如
DB_HOST=127.0.0.1但 MySQL 用户只允许'user'@'localhost',得加一条'user'@'127.0.0.1')
如何快速验证配置是否生效
别急着跑 php artisan migrate,先用最轻量的方式测通路:
执行 php -r "var_dump(PDO::getAvailableDrivers());" 确认 PDO MySQL 驱动已启用;再运行 php artisan tinker,输入 DB::connection()->getPdo(); —— 如果抛出异常,说明连接参数或服务层有问题;如果返回一个 PDO 实例,基本就稳了。注意:tinker 里执行后别忘了 exit,否则会卡住。
MySQL 8 默认认证插件导致的静默失败
新装 MySQL 8 默认用 caching_sha2_password 插件,而老版本 PHP 的 mysqlnd 扩展不支持,结果就是连接超时或报 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client。解决方法只有两个:
- 降级用户认证方式:
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 升级 PHP 到 7.4+ 并确保
mysqlnd编译时启用了--with-mysql-sock和--enable-mysqlnd(多数现代包已默认支持)
这个点特别容易被忽略——错误信息里没提插件,日志也不报具体原因,只显示连不上。










