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高权限账号
- 执行以下命令用系统root权限进入MySQL命令行:
sudo mysql - 在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; - 回到项目
.env文件,修改数据库账号配置:DB_USERNAME=laravel_app DB_PASSWORD=your_strong_password - 再次执行
php artisan config:clear清除缓存
- 执行以下命令用系统root权限进入MySQL命令行:
- 方案2(仅本地开发环境使用,操作更简便):直接修改root账号的认证方式为密码认证
- 执行
sudo mysql进入MySQL命令行 - 依次执行以下语句,其中
your_root_password替换为你要设置的root账号密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_root_password'; FLUSH PRIVILEGES; EXIT; - 确认项目
.env文件中DB_USERNAME=root,DB_PASSWORD填写刚才设置的your_root_password,执行php artisan config:clear清除缓存
- 执行
- 所有配置修改完成后,重新执行迁移命令即可正常运行:
php artisan migrate
内容的提问来源于stack exchange,提问作者Amir Adamov
相关产品推荐
相关产品推荐

