如何在本地Laravel 8应用中连接Bluehost远程数据库?
解决Laravel 8本地连接Bluehost远程数据库的1045访问拒绝错误
问题场景
本地Laravel 8应用尝试连接Bluehost创建的远程数据库时,执行查询抛出权限错误:
SQLSTATE[HY000] [1045] Access denied for user 'ngtonlin_cron_jobs_test'@'Shared IP Address.braintel.net.pk' (using password: YES) (SQL: select * from
users)
当前.env配置:
DB_CONNECTION=mysql DB_HOST=Shared IP Address DB_PORT=3306 DB_DATABASE=db_name DB_USERNAME=user_name DB_PASSWORD="D$8]!2?^kg(!"
测试查询代码:
Route::get('/', function () { $users = DB::table('users')->get(); dd($users); });
解决方案
1. 给数据库用户开放远程访问权限
Bluehost默认仅允许服务器本地IP访问数据库,需手动授权你的本地公网IP:
- 登录Bluehost的cPanel面板,找到MySQL Databases
- 进入Remote MySQL选项
- 添加你的本地公网IP(可通过执行
curl ifconfig.me获取);测试阶段可临时用%允许所有IP访问(生产环境禁用此操作)
2. 修正.env密码格式
密码包含特殊字符时,不需要包裹双引号,修改为:
DB_PASSWORD=D$8]!2?^kg(!
修改后执行以下命令清除配置缓存:
php artisan config:clear php artisan cache:clear
3. 验证凭证与连通性
- 用Navicat、DBeaver等数据库工具直接使用现有凭证连接远程数据库,确认IP、端口、用户名、密码、数据库名完全匹配
- 检查Bluehost是否使用非默认3306端口,部分主机可能自定义数据库端口
4. 排查本地网络限制
- 确认本地防火墙未阻止3306端口的出站请求
- 执行
telnet <DB_HOST> 3306测试与远程数据库服务器的连通性,无报错则说明网络通路正常
内容的提问来源于stack exchange,提问作者Irshad Khan
相关产品推荐
相关产品推荐

