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

如何解决Laravel连接MySQL时出现的SQL认证方法未知错误?

解决Laravel 5.5连接MySQL 8.0的认证方法错误问题

这个错误的核心原因很明确:MySQL 8.0默认启用了caching_sha2_password认证插件,但Laravel 5.5对应的PHP数据库驱动(比如mysqlnd)还不支持这种新的认证方式,导致连接时出现兼容性问题。下面给你两种直接可行的解决办法:

方法一:修改Docker Compose配置,让MySQL默认兼容旧认证规则

直接在你的docker-compose.yml的mysql服务中添加默认认证插件的参数,修改后的完整配置如下:

version: "2"
services:
  mysql:
    image: mysql
    ports:
      - "3307:3306"
    command: --sql_mode="" --default-authentication-plugin=mysql_native_password

修改完成后,重启MySQL容器生效:

docker-compose down && docker-compose up -d

这样后续创建的所有数据库用户都会默认使用mysql_native_password认证,Laravel就能正常建立连接了。

方法二:手动修改已有数据库用户的认证方式

如果已经为Laravel创建了专属的数据库用户,可以直接进入MySQL容器修改该用户的认证规则:

  1. 先进入MySQL容器(替换[你的mysql容器名/ID]为实际名称或ID):
docker exec -it [你的mysql容器名/ID] mysql -u root -p
  1. 执行SQL命令调整用户认证方式(替换your_laravel_user和your_password为你Laravel配置里的数据库用户名和密码):
ALTER USER 'your_laravel_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;

执行完成后退出容器,Laravel就能正常连接数据库了。

最后补充个小提醒:Laravel的.env配置里,DB_HOST要填写docker-compose中mysql服务的名称(也就是mysql),而不是localhost;端口用容器内部的3306即可,外部映射的3307是给宿主机连接用的,容器间通信不需要用这个端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:19