MacOSX homebrew mysql root 密码

163
由于某种原因,MySQL停止了root用户的访问权限。使用Homebrew进行了卸载和重新安装。全新安装,全新的数据表,但是当我输入时,
mysql -u root -p

我遇到了这个错误:
访问被拒绝,用户'root'@'localhost'(未使用密码)。
我已经重新安装了MySQL五次,但它仍然要求输入密码。我该如何解决这个问题?

在Superuser上几乎有一个完全相同的问题。请按照以下步骤操作:http://superuser.com/a/400345 - Icarus
18
只需运行 mysql_secure_installation 命令并回答相应问题即可,非常简单。 - Abhinav Singh
19
mysql_secure_installation命令会提示输入root密码,如果你已经设置但忘记了密码,这个步骤将无法帮助你。 - JohnG
1
如果已经安装了MySQL 5.7,请按照以下步骤操作:https://dev59.com/_2855IYBdhLWcg3waDeR#33924648 - mrucci
2
就我个人而言,“mysql -u root”在这里可行。 - rogerdpack
在 macOS 10.13 上,用户应该使用 'sudo mysql -u root' 而不是 'mysql -u root'。 - NME New Media Entertainment
27个回答

194

这些方法都没有对我起作用。我想我已经在电脑上安装了MySQL,所以密码可能已经被设置过了。在尝试了很多解决方案之后,以下方法最终成功了:

$ brew services stop mysql
$ pkill mysqld
$ rm -rf /usr/local/var/mysql/ # NOTE: this will delete your existing database!!!
$ brew postinstall mysql
$ brew services restart mysql
$ mysql -uroot

所有的功劳归于@Ghrua


9
之前的帖子对我没用,但是这个虽然有破坏性,但效果很好。 - Clay
7
当您登录到MySQL后,请使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOURNEWPASSWORD';来设置您的新根密码。 - Martin Braun
1
终于有一个正常工作的解决方案了。@2020 MacOs catalina。 - Mindaugas Kurlys
brew postinstall mysql 对我很有帮助。谢谢! - lucasvscn
1
这对我来说几乎起作用了,我做了以下操作:brew services stop mysql; brew uninstall mysql; pkill mysqld; rm -rf /usr/local/var/mysql; rm /usr/local/etc/my.cnf; brew postinstall mysql; brew install mysql; brew services restart mysql; mysql -uroot - aubreypwd
显示剩余6条评论

160

只需运行以下命令(其中NEWPASS为您的密码):

$(brew --prefix mysql)/bin/mysqladmin -u root password NEWPASS

我曾经遇到了同样的错误,并用以下方法解决了它。


17
对我有用。显然(或许),美元符号($)必须作为命令的一部分输入(它不仅仅是一个 shell 提示符)。 - hobs
5
建议不要在命令中包含NEWPASS,以避免将其存储在您的shell历史文件中。如果您在没有密码的情况下运行该命令,该命令将自动询问输入密码,因此没有必要在命令中包含它。 :) - levifig
6
如果使用Mariadb,则运行以下命令以更改root用户密码为NEWPASS:$(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS - bryceadams
11
使用MariaDB时无法工作(即使使用@bryceadams的备注): /usr/local/opt/mariadb/bin/mysqladmin:连接到'localhost'服务器失败,错误为:“Access denied for user 'root'@'localhost'”。 - trainoasis
21
对于Mariadb,如果你因用户访问被拒绝而出现问题:sudo $(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS - upful
显示剩余6条评论

76

如果您无意中设置并忘记了root密码,而且您不想擦除所有数据库并重新开始,因为您很懒,并忘记了备份解决方案,而且您正在使用相当新的Homebrew安装(2013年冬季),那么以下是重置MySQL密码的步骤。

停止当前正在运行的MySQL实例

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

现在手动启动mysql,跳过授权表和网络设置

$(brew --prefix mysql)/bin/mysqld_safe --skip-grant-tables --skip-networking

请注意,如果您在bash中运行echo $(brew --prefix mysql)时,它没有响应为"/usr/local/opt/mysql",您将需要相应地调整路径。
完成此操作后,您现在应该有一个正在运行的、未受保护的MySQL实例。
登录并设置密码。
mysql -u root

在提示符处,输入以下MySQL命令为受影响的用户设置新密码。
mysql> update mysql.user set password=PASSWORD('new_password_here') WHERE user='root';

如果一切按计划进行,它应该显示:
Query OK, 1 row affected (0.02 sec)
Rows matched: 4  Changed: 1  Warnings: 0

退出MySQL提示符。

mysql> exit
Bye

停止服务器:

mysqladmin -u root shutdown

现在,让我们重新安装启动守护进程,这样我们就可以再次使用MySQL了:

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

恭喜你,已成功重置mysql管理员密码。煮杯咖啡庆祝一下,并且开始制定备份解决方案!

6
更改密码后停止未受保护的MySQL服务器:mysqladmin -u root shutdown - Vebjorn Ljosa
9
我刚遇到了这个问题,发现这个答案最接近。我注意到在mysql 5.7.9中,password不是一个有效的列名。相反,我必须使用authentication_string代替。其余的指示完美地运作。谢谢! - M. Scott Ford
5
正如M. Scott Ford所说,正确的命令为:update user set authentication_string=password('new_password_here') where user='root'; - Panayotis
3
为使它起作用,我必须运行update mysql.user set authentication_string=password('none') where user='root';。(与在我上面的评论相同,但在“user”前添加“mysql.”) - Steve Meisner
3
自 MySQL 8.0.11 开始,密码函数已被删除。详情请见更多信息 - chancyWu
1
列名已更改... UPDATE mysql.user SET authentication_string=PASSWORD('xxxx!') WHERE User='root'; - kevinc

65

几天前我遇到了同样的问题。如果你是通过homebrew安装mysql并在启动mysql守护进程之前运行初始化脚本mysql_install_db, 就会出现这个问题。

为了解决这个问题,你可以删除mysql数据文件,重新启动服务,然后再运行初始化脚本:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
rm -r /usr/local/var/mysql/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

对我来说完美地工作了。实际上我不想为本地机器设置密码,所以其他的解决方案并不是我在寻找的。 - brad
3
mysql_install_db已经过时,请考虑使用'mysqld --initialize'。 - Brian
1
当我运行第一个命令时,我只会得到“没有这样的文件或目录”。 - Agent Zebra
1
运行mysqld --initialize命令后,您会在控制台的日志消息中注意到它为root用户设置了临时密码。复制该密码并在下一次执行“mysql -uroot -p”命令时使用它-它肯定会起作用的。然后MySQL将要求您重置密码。请查看http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html。 - Vikrant Labde
@VikrantLabde “这肯定会起作用” - 非常雄心勃勃的声明。我尝试了这个方法,使用了它给我的临时密码,但仍然无法获得访问权限。你是否需要在任何标点符号前加上反斜杠进行转义? - Max Goodridge

56

在使用Homebrew安装mysql后出现了这个错误。

首先删除已安装的mysql,然后通过Homebrew重新安装。

brew update
brew doctor
brew install mysql

然后重新启动mysql服务

 mysql.server restart

然后运行此命令以设置您的新根密码。

 mysql_secure_installation

最后它会要求重新加载权限。选择“是”。然后再次登录到MySQL。使用您设置的新密码。

mysql -u root -p

1
这是完美的解决方案。我已经尝试运行 mysql_secure_installation,但关键部分是 mysql.server restart - Johan
mysql_secure_installation 是关键部分。 - Nik
1
为了避免麻烦,只需像nirojan说的那样键入重启命令,然后运行mysql_secure_installation。 - Dan Zuzevich
这在Ventura 13.4上运行。重新启动时出现了某种“配置”,并能够继续工作。应将此添加到brew安装程序以方便使用。 - vsecades

33

如果您正在运行Mojave、Catalina、Big Sur,并且现在是在macOS Monterey上:

brew install mariadb
...
brew services start mariadb
==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)

 $(brew --prefix mariadb)/bin/mysqladmin -u root password newpass
/usr/local/opt/mariadb/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost''

同时使用root账户登录也失败了:

mariadb -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

默认管理员用户的用户名与您的MacOS帐户 用户名 相同,例如johnsmit

要登录为根用户并设置根密码,请使用以下命令(使用您的用户名):

mariadb -u johnsmit
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.4.11-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ROOT-PASSWORD';
Query OK, 0 rows affected (0.006 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> exit
Bye

如何在本地更改mysql的root密码。

额外提示:要更改当前用户或其他用户的密码,可以使用mysqladmin命令:

$(brew --prefix mariadb)/bin/mysqladmin -u arunas password 'newsecret'

但出于某种原因,这不会影响本地主机,但应该适用于应用程序登录。

或者使用本机MySQL更改用户密码SQL,明确指定主机,在我的情况下为用户的'localhost'账户:

mariadb -u arunas
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.5.9-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> ALTER USER 'arunas'@'localhost' IDENTIFIED BY 'newsecret';
Query OK, 0 rows affected (0.006 sec)

MariaDB [(none)]> exit
Bye

现在让我们尝试不用密码登录:

mariadb -u arunas
ERROR 1045 (28000): Access denied for user 'arunas'@'localhost' (using password: NO)

你看到登录失败的提示,因此我们现在需要指定密码:

mariadb -u arunas -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.5.9-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> exit
Bye

愉快的使用!


4
MacOS的账户名对我来说很有用。 - Dan
我可以为macOS账户名称用户添加密码吗? - OrigamiEye
那个可以,但是如何更改根密码? - Павел Зорин
与任何用户显示的示例相同,但添加了在第一次登录时一次性更改根密码的说明。 - Arunas Bartisius
2
终于有一些回答解决了我的问题! - Caio

12

由于问题在很长时间前就被提出/回答了,那些最佳答案对我来说不起作用。这是我的解决方案,在2020年。

背景: 使用Homebrew安装了新的mysql/mariadb。

问题: root用户的密码不为空且未知。

解决方法:

  1. mysql -u YOUR-SYSTEM-USERNAME -p
  2. 密码为空(按回车键)
  3. ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW-ROOT-PASSWORD';
  4. FLUSH PRIVILEGES;

原因:

  1. Homebrew将创建一个名为当前MacOS用户名并具有root权限的用户。
  2. 它没有密码
  3. 由于它拥有所有权限,只需使用该用户重置root密码即可。
  4. root的初始密码是随机生成的。

2020年正确答案。我无法要求输入MacOS用户名的密码。 - OrigamiEye
以上方法不起作用了。在Catalina上,mysql_secure_installation适用于我。 - Ken Jenney
截至今日,从High Sierra到Catalina,使用brew install mariadb(mariadb:stable 10.6.4(bottled)),我能够执行mysql -uroot -proot。 - gstlouis
2
这应该是2023年的最佳答案,适用于现代MacOS和来自homebrew的最新MariaDB。 - Chris Koston

10

这对我有用:

sudo mysql -u root

1
sudo 做到了。 - Werner Altewischer
如果您正在运行macOS Monterey 12.1,并且使用brew进行了全新的MariaDB安装,想要从终端访问mysql,则这是正确的答案。 - NME New Media Entertainment

10
  1. 前往苹果图标 --> 系统偏好设置
  2. 打开Mysql
  3. 在实例中,你会看到 "初始化数据库"
  4. 点击那个选项
  5. 你将被要求为root账号设置密码 --> 在那里设置一个强密码
  6. 使用该密码在下次登录 Mysql 时进行登录

希望这有所帮助。


简单易行的方法。谢谢。 - Ezequiel Santos
谢谢。它终于对我起作用了。在上述过程之后别忘了启动服务器。它与“初始化数据库”在同一个窗口。 - rahulxyz

7

使用sudo命令可避免"访问被拒绝"错误:

sudo $(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接