【问题标题】:Access denied for user MySql用户 MySql 的访问被拒绝
【发布时间】:2019-01-24 22:45:58
【问题描述】:

问题是我的本地 Laravel 项目无法连接到 MySQL,我收到以下错误:

拒绝用户“root”@“localhost”访问(使用密码:YES)

操作系统:macos high sierra 浏览器:Chrome; MySql 版本:8.0.12 Laravel 版本:5.6 宅基地版本:7.0

我试图解决的问题:

  1. 检查是否有一个 MySql 实例正在运行 - 它正在运行。

  2. 检查 .env 文件和 config/database.php 中的凭据 - 凭据正确(Mysql root 用户密码已更改为安装时生成的密码)

  3. 我检查了我是否可以通过终端连接以仔细检查凭据是否正确 - 我可以并且它们是正确的

  4. 尝试创建具有所有 root 权限的新 MySql 用户。 - 同样的错误。

  5. 我可以在终端中运行php artisan migrate 并创建表。由于该网站被拒绝,我认为这很奇怪。

  6. 我完全删除了 MySql 3 次。 (按照本指南:https://gist.github.com/vitorbritto/0555879fe4414d18569d)-同样的错误

  7. 所以我从头开始销毁了 vagrant box 和 Laravel 项目并从头开始 - 同样的错误。

  8. 抑制了打我电脑的冲动。

.env(更新)

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

yaml:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: ~/Sites
      to: /home/vagrant/Sites

sites:
    - map: site.test
      to: /home/vagrant/Sites/sitetest/public

databases:
    - homestead

/etc/hosts

##
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##


127.0.0.1   localhost
255.255.255.255 broadcasthost
::1 localhost

127.0.0.1 site.test

【问题讨论】:

  • 你有一个名为'root'的mysql用户并且密码匹配吗?和数据库名称?
  • 如果您的凭据为真,请尝试将数据库名称更改为另一个名称。

标签: mysql laravel localhost


【解决方案1】:

宅基地的默认密码不是something

根据 laravel 文档,它是 secret

为 MySQL 和 PostgreSQL 配置了一个宅基地数据库 的盒子。为了更方便,Laravel 的 .env 文件配置 开箱即用使用此数据库的框架。

从您的主机连接到您的 MySQL 或 PostgreSQL 数据库 机器的数据库客户端,你应该连接到 127.0.0.1 和端口 33060 (MySQL) 或 54320 (PostgreSQL)。用户名和密码 两个数据库都是宅基地/秘密。

文档地址:https://laravel.com/docs/5.6/homestead

更新:

您还可以授予您的用户使用数据库的权限:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

【讨论】:

  • 我也试过这个并且给出了错误`未找到基表或视图:1146表'homestead.users'不存在`并且它确实存在,就像mysql中的用户和它有权限。
  • 您只需要授予您的用户使用您的桌子的权限就可以了。
  • 我之前尝试过并再次尝试过。以 root 用户身份运行 GRANT ALL ON homestead.users TO 'homestead'@'localhost';。与上述相同的错误Base table or view not found: 1146 Table 'homestead.users' doesn't exist
  • Grant 查询应如下所示:GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
  • 不幸的是,同样的错误。所以我初始化数据库并从一开始就创建了宅基地用户、数据库和表,但仍然出现同样的错误。
【解决方案2】:

您可以通过缓存配置来解决您的问题:

php artisan config:cache

【讨论】:

  • 也试过了。以及php artisan route:clear php artisan config:clear php artisan cache:clear 得到同样的错误Base table or view not found: 1146 Table 'homestead.users' doesn't exist
【解决方案3】:
  1. CD 进入你的 Homestead 目录
  2. 运行vagrant ssh
  3. 运行php artisan migrate

【讨论】:

  • 这可能解决了您的问题,但不是解决方案。
  • 我认为,您的问题是您的机器上有 2 种不同的 Laravel 配置 - 一种是本地配置,另一种是 vagrant。如果您配置了 vagrant 和 homestead,则不需要单独安装 MySQL。因此,当您尝试所有命令均未成功时,您实际上是在主机上尝试它们。后来,当您通过vagrant ssh 登录来宾计算机时,一切都开始正常工作了。
  • 如果我的评论帮助您确定了问题,请告诉我,以便我将其转换为答案。
【解决方案4】:

在 hosts 文件中,运行 Homestead 时,您必须将 127.0.0.1 site.test 更改为 192.168.10.10 site.test

当然,这只会在vagrant up之后有效

【讨论】:

  • 你能解释一下为什么这样做吗?
  • 成功了吗?好吧,当你运行 vagrant 时,你会在你的 windows 上启动一个虚拟机,在本例中是 Linux。要访问它,vm 有自己的本地 ip。对于宅基地(homestead.yalm 文件),它设置为 192.168.10.10。要访问它,请运行 ssh -p 7822 ssh vagrant@127.0.0.1 -p 2222 password 'vagrant'(无引号)
  • 你可能想知道如何通过 127.0.0.1 访问虚拟机。您正在创建与 vm 的隧道连接。这是访问虚拟机的唯一方法。由于两个 laravel 在 vagrant 运行时都是一个精确的副本,它解释了为什么本地运行的 artisan 命令会对 vm 文件产生影响。反之亦然。
  • 仅供参考,如果您使用 MySQL Workshop 之类的 MySQL 客户端,您只需添加一个“0”即可访问您的 vm 数据库。你的 sql 连接变成了 127.0.0.1 端口 33060。
  • 感谢您的解释。我已经解决了这个问题,但是您的回答首先解释了为什么会发生这种情况。更新您的答案,我会将其标记为正确。
【解决方案5】:

试试这个

首先在mysql里面运行sudo mysql -u root -p 接下来执行这个命令:

use mysql;
update user set plugin='' where User="root";
flush priviliges;
exit

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2013-08-22
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多