【问题标题】:Reset MySQL Password on Homestead在 Homestead 上重置 MySQL 密码
【发布时间】:2016-10-16 04:20:50
【问题描述】:

我正在通过 Vagrant 运行 Homestead 来安装本地 Laravel。我通过 ssh (vagrant ssh) 登录 Homestead,并使用主机 localhost、用户 homestead、密码 secret。我能够成功连接,并且运行 show databases; 告诉我那里有一个 information_schema 数据库。我认为一切都很好,我可以为我的 Laravel 项目创建一个新数据库并开始工作。

不幸的是,运行 CREATE DATABASE mynewdb; 返回:

错误 1044 (42000):用户 'homestead'@'localhost' 拒绝访问数据库 'mynewdb'

我尝试通过以下方式为宅基地用户提供更多特权:

GRANT ALL PRIVILEGES ON mynewdb.* TO 'homestead'@'localhost' WITH GRANT OPTION;

但会返回类似的拒绝访问消息:

Access denied for user 'homestead'@'localhost' (using password: YES)

我尝试了该命令的其他一些变体,例如使用“%”而不是“localhost”,但似乎我的宅基地用户没有完全管理此数据库所需的权限。

我认为我应该能够使用 --skip-grant-tables 标志简单地重新启动 mysql 服务,然后以 homestead 或 root 身份登录并拥有完全权限。这也失败了:

vagrant@homestead:~$ sudo /etc/init.d/mysql stop
[....] Stopping mysql (via systemctl): mysql.servic[.ok 

vagrant@homestead:~$ sudo /etc/init.d/mysql start --skip-grant-tables
[....] Starting mysql (via systemctl): mysql.servic[.ok 

vagrant@homestead:~$ mysql -h localhost
ERROR 1045 (28000): Access denied for user 'vagrant'@'localhost' (using password: NO)
vagrant@homestead:~$ mysql -h localhost -u homestead
ERROR 1045 (28000): Access denied for user 'homestead'@'localhost' (using password: NO)
vagrant@homestead:~$ mysql -h localhost -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
vagrant@homestead:~$ mysql
ERROR 1045 (28000): Access denied for user 'vagrant'@'localhost' (using password: NO)

在这些尝试之后,我使用 homestead 和 secret 登录,只是为了检查是否有任何变化:

vagrant@homestead:~$ mysql -h localhost -u homestead -p
mysql> create database mynewdb;

错误 1044 (42000):用户 'homestead'@'localhost' 拒绝访问数据库 'mynewdb'

最后,我注意到在我的 homestead.yml 文件中有一个看起来像这样的条目:

databases:
- homestead

我将此条目修改为:

databases:
- homestead
- mynewdb

然后重启宅基地虚拟机:

vagrant halt
vagrant up

然后再次尝试使用 homestead MySQL 用户创建新的数据库。这些都没有做任何事情,对于试图做任何事情的宅基地用户仍然完全拒绝访问。

获得访问权的建议?

【问题讨论】:

  • 对不起,我有点困惑。 mynewdb 数据库是否已创建?如果没有,宅基地用户是否有权创建新数据库?
  • mynewdb 尚未创建。似乎宅基地用户没有任何权限来创建新数据库。我在网上阅读的所有内容都说宅基地用户应该等同于 root,并具有完全权限。我认为权限有可能在过去的某个时候被弄乱/覆盖。我需要做的就是在不访问 root 帐户的情况下重置权限。我显然可以访问宅基地的服务器,所以我可以重新启动 MySQL,将其关闭等。如何在不完全重新安装 MySQL 的情况下获得访问权限?
  • 我在我的问题中添加了更多关于我如何尝试使用 --skip-grant-tables 重新启动 mysql 服务,但无法做到的问题。
  • 我对vagrant一​​无所知,对设置mysql也知之甚少。只是想问一个澄清的问题。你会得到我的 +1,祝你好运

标签: mysql laravel homestead


【解决方案1】:

我没有耐心尝试解决这个问题,因为它显然完全不正确。备份配置后,我终于销毁了 Homestead VM 及其所有文件,然后重新安装了机器。启动它,以及宅基地用户如何拥有应有的完全访问权限。不知道上次到底发生了什么,但这里的教训是:初始化新的虚拟机很便宜,使用错误的权限是很昂贵的。

如果有人对我如何解决这个问题有解释,我会接受他们的回答。否则,重新安装 Homestead 似乎是最快的解决方案。

【讨论】:

    【解决方案2】:

    要以 root 用户身份登录 MySQL,您可以使用:

    mysql -u root -p
    

    然后输入您的 MySQL 密码。

    要以其他用户身份登录,您必须先创建该用户并授予他权限。

    使用创建用户 - 将 newuser 更改为您想要的用户名,将密码更改为您选择的密码。

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    

    遗憾的是,此时 newuser 没有权限对数据库进行任何操作。 因此,第一阶段是授予用户做“事情”的权限。 要授予所有数据库和表的所有权限(选择、创建、删除、更新、删除等),请运行:

    GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
    

    要授予特定数据库和表的特定权限,只需运行:

    GRANT [type of privilege] ON [database name].[table name] TO '[username]'@'localhost';
    

    如果您需要拒绝或撤销某个特权,只需运行:

    REVOKE [type of permission] ON [database name].[table name] FROM '[username]'@'localhost';
    

    【讨论】:

    • 谢谢,我对这一切都很熟悉,但我的问题特别与 Homestead 相关,我不知道 root 用户密码。我在该主题上看到的所有内容都只是说使用宅基地用户,但是由于我的似乎没有任何有用的权限,所以我有点卡住了。是否有我无法找到的 root 用户的宅基地密码?如果没有,我假设有一种方法可以在不需要特权的情况下重新启动 MySQL,然后创建一个新用户并为其分配完全特权。我只是不确定该怎么做。谢谢!
    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 2018-02-19
    • 2019-06-09
    • 1970-01-01
    • 2012-02-08
    • 2011-12-17
    • 2018-06-09
    • 2021-04-29
    相关资源
    最近更新 更多