在Homestead上重置MySQL密码

时间:2016-10-16 04:20:51

标签: mysql laravel homestead

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

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

ERROR 1044(42000):拒绝用户'宅基'@'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)

在那些尝试之后,我用宅基地和秘密登录,只是为了查看是否有任何变化:

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

ERROR 1044(42000):拒绝用户'宅基'@'localhost'访问数据库'mynewdb'

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

databases:
- homestead

我将此条目修改为:

databases:
- homestead
- mynewdb

然后重启hometead VM:

vagrant halt
vagrant up

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

获取访问权限的建议?

2 个答案:

答案 0 :(得分:1)

要以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';

答案 1 :(得分:0)

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

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