数据库连接失败(sqlstatehy000)是laravel-admin安装首步卡点,主因是laravel底层数据库认证失败,需依次检查.env中db_host用127.0.0.1而非localhost、账号密码准确、mysql服务运行、用户拥有目标库全权限。

数据库连接失败:SQLSTATE[HY000] [1045] Access denied
这是 laravel-admin 安装时最常卡住的第一步——php artisan admin:install 直接报错,根本进不了迁移阶段。核心原因不是 laravel-admin 本身有问题,而是 Laravel 底层连不上数据库。
常见现象包括:
- 执行
php artisan admin:install后抛出SQLSTATE[HY000] [1045] Access denied for user 'xxx'@'xxx' - 甚至
php artisan tinker里运行DB::connection()->getPdo()都失败
必须按顺序排查:
- 确认
.env中DB_HOST不写localhost,改用127.0.0.1(尤其 Docker 或某些 MySQL 配置下,localhost会触发 socket 连接,而用户权限没配 socket 认证) - 检查
DB_USERNAME和DB_PASSWORD是否与 MySQL 实际创建的账号完全一致(注意空格、大小写、特殊字符) - 确保数据库服务已运行:
systemctl status mysqld(Linux)或任务管理器里确认mysql进程在跑 - 验证该用户对
DB_DATABASE有全部权限:GRANT ALL ON your_db_name.* TO 'your_user'@'%' IDENTIFIED BY 'your_pass'; FLUSH PRIVILEGES;
安装中途报错:Specified key was too long(1071 错误)
这个错误出现在 php artisan admin:install 执行迁移时,典型提示是:SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long,卡在 users_email_unique 或类似索引创建上。
本质是 MySQL 5.7.7+ 默认 utf8mb4 字符集下,VARCHAR(255) 字段建唯一索引时超出 InnoDB 的 767 字节限制。
临时解法(推荐):
- 在
app/Providers/AppServiceProvider.php的boot()方法里加一行:Schema::defaultStringLength(191); - 不要动
config/database.php里的charset或collation——laravel-admin 依赖默认配置,改了反而可能引发其他表迁移失败
注意:如果你的 MySQL 版本 ≥ 5.7.7 且启用了 innodb_large_prefix,理论上可支持更长索引,但不如直接设 191 稳定,因为 191 × 4 = 764 字节,严格低于 767 上限。
安装完成却无法登录:419 Page Expired
页面能打开,表单也显示正常,但一提交就跳 419 Page Expired,后台日志里看不到明显错误。这不是数据库问题,而是 HTTPS 协议和 CSRF Token 信任链断裂导致的。
关键点在于:laravel-admin 的登录页虽自带 @csrf,但它生成 token 时依赖 APP_URL 和 config/admin.php 中的 https 配置是否匹配实际访问协议。
必须同步检查两处:
-
.env中的APP_URL必须与你浏览器地址栏协议一致(例如线上是https://admin.example.com,就不能留http://localhost) -
config/admin.php里找到'https' => env('ADMIN_HTTPS', false),确保环境变量ADMIN_HTTPS=true已设置,或直接改成true
改完别忘了清缓存:php artisan config:clear,否则 env() 调用仍读旧值。
安装后资源加载 404 或样式错乱
登录成功,但左侧菜单空白、图标不显示、按钮无样式——大概率是前端资源没发布或路径不对。
根本原因不是 laravel-admin 安装失败,而是 php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" 没真正生效:
- 检查
public/vendor/laravel-admin目录是否存在且非空;若为空,重跑 publish 命令,并确认没有加--force导致跳过已存在文件 - 如果用了 Nginx,确认 server 块里有
try_files $uri /index.php?$query_string;,否则/admin/css/app.css这类静态资源会 404 - 开发环境用
php artisan serve时不会出这问题,但上线部署到 Nginx/Apache 就容易漏掉 rewrite 规则
另外,config/admin.php 中的 'route' => ['prefix' => 'admin'] 和 Nginx 的 location 匹配要一致,比如 prefix 是 admin,Nginx 就不能只配 location /a/。











