Laravel遇MySQL 1045错误:root本地访问被拒,同配置Joomla可正常运行
解决Laravel中SQLSTATE[HY000] [1045] Access Denied问题
我之前也碰到过类似的情况——明明同服务器的Joomla用一样的配置能正常跑,Laravel却死活连不上MySQL,给你几个实用的排查和解决步骤:
仔细核对
.env配置细节
虽然你删过.env重建,但一定要确认这几个点:DB_USERNAME=root没有拼写错误DB_PASSWORD=这里必须是空值,不要加空格、引号或者任何字符(因为root没设密码)- 试试把
DB_HOST=localhost改成DB_HOST=127.0.0.1,Laravel对localhost的解析有时候会走Unix socket,而Joomla可能用的是TCP/IP连接,换IP说不定能绕开这个差异
彻底清理Laravel缓存
有时候只清普通缓存不够,配置缓存里可能还存着之前错误的配置,运行这组命令彻底清空:php artisan config:clear php artisan cache:clear php artisan route:clear php artisan view:clear执行完后重启一下你的Web服务器(比如Nginx或Apache),确保新配置生效
检查MySQL用户权限与连接方式
登录MySQL(直接敲mysql -u root就能进,因为没密码),执行这条SQL查看root用户的权限条目:SELECT user, host FROM mysql.user WHERE user = 'root';确保存在
root@localhost和root@127.0.0.1的条目。如果只有root@localhost,可以给root@127.0.0.1授权:GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES;之后把
.env里的DB_HOST改成127.0.0.1再测试排查
config/database.php的硬编码配置
打开config/database.php,找到MySQL配置段,确保用户名和密码是通过env()函数读取的,而不是硬编码的:'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''),如果这里直接写死了密码或者用户名,
.env的设置会被覆盖,导致连接失败用原生PHP测试MySQL连接
写个简单的测试脚本,排除Laravel框架的影响:<?php // 测试localhost连接 $conn = mysqli_connect('localhost', 'root', ''); if (!$conn) { echo "Localhost连接失败: " . mysqli_connect_error() . "\n"; } else { echo "Localhost连接成功\n"; mysqli_close($conn); } // 测试127.0.0.1连接 $conn2 = mysqli_connect('127.0.0.1', 'root', ''); if (!$conn2) { echo "127.0.0.1连接失败: " . mysqli_connect_error() . "\n"; } else { echo "127.0.0.1连接成功\n"; mysqli_close($conn2); }运行这个脚本,如果某个地址能成功连接,就把Laravel的
DB_HOST改成对应的地址
内容的提问来源于stack exchange,提问作者Giacomo M
相关产品推荐
相关产品推荐

