在 OSX 上重置 MySQL 密码不起作用(没有授权表就无法连接)

在 OSX 上重置 MySQL 密码不起作用(没有授权表就无法连接)

首先我要说的是,我浏览了大量帖子(这里以及互联网和文章在 mysql.com 上查看了有关重置管理员密码的信息,但似乎对我没什么用。哦,我对命令行操作也还不太熟悉。

以下“解决方案”似乎对每个人都有效,但对我却无效:


Last login: Mon Nov  3 12:02:21 on console
maurice@Maurices-MacBook-Pro:~$ sudo /usr/local/mysql/support-files/mysql.server stop
Password:
Shutting down MySQL
. SUCCESS! 
maurice@Maurices-MacBook-Pro:~$ sudo mysqld_safe --skip-grant-tables
141103 12:25:35 mysqld_safe Logging to '/usr/local/mysql/data/Maurices-MacBook-Pro.local.err'.
141103 12:25:35 mysqld_safe A mysqld process already exists
maurice@Maurices-MacBook-Pro:~$ 

我不知道其他进程来自哪里,也不知道如何关闭它。如果我继续按照说明操作并打开新的控制台选项卡,我会得到以下信息:


Last login: Mon Nov  3 12:25:16 on ttys000
maurice@Maurices-MacBook-Pro:~$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
maurice@Maurices-MacBook-Pro:~$ sudo mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
maurice@Maurices-MacBook-Pro:~$ 

我无法进入 mysql 来更新密码。我可以通过命令与 MySQL 通信mysql,但(当然)我无法执行任何查询:


maurice@Maurices-MacBook-Pro:~$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'
mysql> 

我昨天晚上花了一整个晚上寻找解决方案,但什么也没找到。请记住,我对命令行操作还很陌生,所以如果我忽略了一些非常基本的问题;抱歉!

我真的希望有人知道解决办法,因为我没有选择了

编辑(解决方案): Paul Haldane 为我指明了正确的方向。我忘记了我已经添加了一个com.mysql.mysql.plist文件,该文件在启动时通过 launchctl 加载,以便在启动时自动启动 MySQL。首先停止sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysql.plistMySQL,然后让我以安全模式登录。

现在很开心:)

答案1

这种行为意味着,当您尝试在未经身份验证的情况下启动新的 MySQL 守护进程时,已经有一个 MySQL 守护进程在运行。这有两个可能的原因。1. 尽管报告成功,但 mysql.server stop 命令不起作用;或者 2. 有一个正在运行的监控进程,如果服务器死机,它会自动重新启动服务器。您应该能够通过使用 ps 查看正在运行的进程来判断发生了什么。尝试

ps uaxww | grep -i mysql

这将为您提供进程列表。如果主 mysqld 已经运行了一段时间,那么原因就是 1,如果它刚刚启动,那么可能是原因 2。无论哪种方式,都使用 kill 命令(通过 sudo)终止进程。只需正常终止 - 不要使用 -9,因为它不会给 MySQLd 干净关闭的机会。之后,您应该能够无需身份验证即可启动守护进程。

相关内容