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

Laravel 9.17.0无法创建迁移 执行migrate报1698访问拒绝错误

问题产生原因

Ubuntu 22.04 软件源默认安装的MySQL,对root@localhost账号默认启用auth_socket认证插件:该插件仅允许操作系统的root用户通过本地socket文件登录MySQL,不支持普通系统用户通过账号密码方式校验登录。你在普通用户权限下执行php artisan migrate时,即便.env里填的root密码正确,也会被MySQL拒绝访问,抛出1698错误码。
另外从报错信息可以看到,你当前配置里读取的数据库名是my_database,和你实际创建的my_project库名不一致,后续修复认证问题后也需要同步修正这个配置项。

解决方法

按以下步骤操作即可,两种账号配置方案二选一:

  • 先修正基础配置:打开项目根目录的.env文件,找到DB_DATABASE配置项,将值改为你实际创建的my_project,保存后执行命令清除Laravel的配置缓存:
    php artisan config:clear
    
  • 方案1(推荐,生产/开发环境均适用,安全性更高):为Laravel项目创建独立的数据库账号,避免使用root高权限账号
    1. 执行以下命令用系统root权限进入MySQL命令行:
      sudo mysql
      
    2. 在MySQL命令行内依次执行以下语句,其中your_strong_password替换为你自定义的数据库密码:
      CREATE USER 'laravel_app'@'localhost' IDENTIFIED BY 'your_strong_password';
      GRANT ALL PRIVILEGES ON my_project.* TO 'laravel_app'@'localhost';
      FLUSH PRIVILEGES;
      EXIT;
      
    3. 回到项目.env文件,修改数据库账号配置:
      DB_USERNAME=laravel_app
      DB_PASSWORD=your_strong_password
      
    4. 再次执行php artisan config:clear清除缓存
  • 方案2(仅本地开发环境使用,操作更简便):直接修改root账号的认证方式为密码认证
    1. 执行sudo mysql进入MySQL命令行
    2. 依次执行以下语句,其中your_root_password替换为你要设置的root账号密码:
      ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_root_password';
      FLUSH PRIVILEGES;
      EXIT;
      
    3. 确认项目.env文件中DB_USERNAME=root,DB_PASSWORD填写刚才设置的your_root_password,执行php artisan config:clear清除缓存
  • 所有配置修改完成后,重新执行迁移命令即可正常运行:
    php artisan migrate
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:01:11