Laravel怎么配置数据库连接 _ Laravel 数据库.env配置方法【教程】

1次阅读

数据库连不上通常是 .env 中 db_host、db_port、db_database 配置错误:db_host 应填 127.0.0.1(避免 unix socket)、db_port 需匹配实际端口(如 docker 可能是 3307)、db_database 必须为已存在且大小写精确匹配的库名。

Laravel怎么配置数据库连接 _ Laravel 数据库.env配置方法【教程】

数据库连不上,八成是 .env 里这三行写错了,不是 laravel 版本问题,也不是 mysql 服务没开。

怎么填 DB_HOSTDB_PORTDB_DATABASE

本地开发最常踩的坑:把 DB_HOST 写成 localhost,结果 Laravel 默认用 Unix socket 连,但你的 MySQL 实际监听的是 TCP —— 这时候会报 SQLSTATE[HY000] [2002] Connection refused

  • DB_HOST127.0.0.1(强制走 TCP),别填 localhost
  • DB_PORT 别空着,默认是 3306,但如果你用 Docker 或 MAMP,得查实它真正暴露的端口,比如 3307
  • DB_DATABASE 必须是已创建好的库名,Laravel 不会自动建库;大小写要和 MySQL 里完全一致(linux 环境区分大小写)

DB_USERNAMEDB_PASSWORD 的权限陷阱

很多人用 root 用户测试没问题,一换到生产环境就报 access denied for user。不是密码错了,是用户没被授权从当前 host 连接。

  • 检查用户是否允许从 % 或具体 IP 连接:select Host, User FROM mysql.user WHERE User = 'your_user';
  • 如果只允许 localhost,而 PHP 是通过 TCP(即 127.0.0.1)连的,就会失败
  • 授予权限后别忘了 FLUSH PRIVILEGES;,否则不生效

为什么 php artisan migrate 找不到表,但 DB::select() 能查?

这是典型的配置缓存没刷新。Laravel 启动时会把 .env 加载进配置并缓存,改完 .env 后不清理缓存,新值根本不会生效。

  • 每次改完 .env,必须运行:php artisan config:clear
  • 如果还用了 php artisan config:cache(常见于生产部署),那必须先 config:clear,再 config:cache
  • 验证是否生效:运行 php artisan tinker,然后输入 config('database.connections.mysql.host'),看返回值是不是你刚写的 127.0.0.1

最麻烦的不是配错哪一项,而是改了之后没清缓存,还反复检查 MySQL 密码——这种时候记得先敲一遍 config:clear

text=ZqhQzanResources