MacOSX自制mysql根密码


116

由于某种原因,MySQL停止给予root用户访问权限。卸载并通过Homebrew重新安装。新安装,新桌子,但当我进入

mysql -u root -p

我收到此错误:

用户'root'@'localhost'的访问被拒绝(使用密码:NO)

我重新安装了MySQL五次,但仍然要求输入密码。我该如何解决?


超级用户中几乎存在一个确切的问题。请执行以下步骤:superuser.com/a/400345
Icarus 2012年

13
只需运行mysql_secure_installation并回答简单的问题即可
Abhinav Singh 2013年

8
mysql_secure_installation命令提示输入root密码。如果您已设置并忘记了它,此过程将无济于事。
JohnG

1
如果brew安装了MySQL 5.7,请按照以下步骤操作:stackoverflow.com/a/33924648/133106
mrucci 2015年

FWIW mysql -u root在这里工作...
rogerdpack

Answers:


115

只需运行以下命令(NEWPASS您的密码在哪里):

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

我遇到了同样的错误,并以这种方式解决了。


16
为我工作。显然(也许),必须在命令中输入美元符号($)(不仅是shell提示)。
滚刀2012年

2
@BrentFoust当然。我$在命令行shell命令的开头消除了char 的用法。其他人可能会感到困惑,因为该$符号通常在SO和其他论坛上用作shell提示标记。但是,$和之间缺少空格也(应该提示人们。
滚刀2014年

3
我建议不要在命令中包括NEWPASS,以免将其存储在Shell的历史记录文件中。如果您在没有通过验证的情况下运行该命令,该命令将自动要求输入,因此没有理由这样做。:)
Levi Figueira 2014年

4
如果使用mariadb:$(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS
bryceadams

8
对于mariadb(甚至带有@bryceadams注意),对我不起作用:/ usr / local / opt / mariadb / bin / mysqladmin:连接到“本地主机”的服务器失败错误:“用户'root'@'本地主机的访问被拒绝'
trainoasis

110

这些都不对我有用。我认为我已经在计算机上某处安装了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


6
以前的帖子对我不起作用,但这篇虽然具有破坏性的文章效果很好。
Clay

1
最终登录mysql时,用于ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOURNEWPASSWORD';设置新的root密码。
马丁·布劳恩

这为我工作,而没有删除我现有的数据库
Mwirabua Tim

最后是一个适当的工作解决方案。@ 2020 MacOs Catalina。
Mindaugas Kurlys

当以前的解决方案不起作用时,这对我有用。谢谢!
莱斯·布朗

65

万一您无意中设置并忘记了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

请注意,如果在运行echo $(brew --prefix mysql)时,它不响应为“ / usr / local / opt / mysql”在bash,则需要相应地调整路径。

完成此操作后,现在应该启动一个正在运行的不受保护的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的root密码。倒一杯咖啡,并准备好备用解决方案!


5
要在更改密码后停止不受保护的MySQL服务器:mysqladmin -u root shutdown
Vebjorn Ljosa 2015年

9
我刚遇到这个问题,发现这个答案是最接近的。我确实注意到这password不是mysql 5.7.9中的有效列。相反,我不得不使用authentication_string代替。其余说明完全正常。谢谢!
M. Scott Ford

5
正如斯科特·福特先生所说,正确的命令是: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';它才能运行。(就像我上方的评论一样,但要优先mysql.user。)
史蒂夫·迈斯纳

2
自mysql 8.0.11起删除了密码功能。细节
chancyWu

62

几天前我遇到了同样的问题。当您mysql通过安装homebrew并运行初始化脚本(mysql_install_db之前,开始启动时会发生这种情况。mysql守护程序。

要修复它,您可以删除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 2013年

3
mysql_install_db已过时,请考虑使用mysqld --initialize
Brian Brian

1
No such file or directory当我运行第一个命令时,我就知道了。
特工Zebra

1
运行mysqld --initialize命令后,您会在控制台的日志消息中注意到它为root用户设置了临时密码。复制该密码并在下次启动命令“ mysql -uroot -p”时使用密码-肯定可以。 。然后MySQL会问你要重置密码..看看这个dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
维克兰特Labde

@VikrantLabde“肯定会成功”-非常雄心勃勃的声明。我尝试了此操作,使用了它提供给我的临时密码,但仍未授予访问权限。您是否必须使用反斜杠来避免出现任何标点符号?
马克斯·古德里奇

47

通过home brew安装mysql后出现此错误。

因此,首先删除安装。然后通过Homebrew重新安装

brew update
brew doctor
brew install mysql

然后重启mysql服务

 mysql.server restart

然后运行此命令来设置新的root密码。

 mysql_secure_installation

最后,它将要求重新加载特权。说是。然后再次登录到mysql。并使用您设置的新密码。

mysql -u root -p

1
这是完美的解决方案。我已经尝试过跑步,mysql_secure_installation但关键部分是mysql.server restart
Johan

mysql_secure_installation是关键部分
Nik

为了避免头痛...只需键入,如nirojan所述,使用重新启动命令,然后运行mysql_secure_installation
Dan Zuzevich

13

如果你跑

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'

然后,将为默认的admin用户创建与您的MacOS帐户用户名相同的名称,例如johnsmit

要以root用户身份登录,请发出:

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)]> exit
Bye

MacOS帐户名称为我做到了。

我可以为macos帐户名称用户添加密码吗?
OrigamiEye


4

我刚刚注意到这里大多数答案的共同点,并在我的全新安装中进行了确认。如果您查看mysqladmin -u root不带的建议,这实际上很明显-p

没有密码。

Brew仅使用root用户设置MySQL,而根本没有密码。我猜这是有道理的,但是安装后的警告根本没有提及。


2
假设没有root密码,我的访问被拒绝了,所以我认为问题不明显。
杰克·弗罗斯特

我并不是说这个问题很明显。对于在正常情况下使用MySQL的人来说,这是完全令人困惑的。但是看看其他回应,原因很明显。
Spyder


2
  1. 转到苹果图标->系统偏好设置
  2. 打开Mysql
  3. 在某些情况下,您会看到“初始化数据库”
  4. 点击那个
  5. 您将被要求为root设置密码->在此处设置一个强密码
  6. 使用该密码从下一次登录mysql

希望这可以帮助。


简单易行的方法。谢谢。
EzequielFrança

2

由于很久以前就问过这个问题,所以这些最重要的答案对我不起作用。这是我在2020年的解决方案。

背景:自制软件安装了最新的mysql / mariadb。

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

解决方法

  1. mysql -u您的系统用户名-p
  2. 密码为空(按Enter)
  3. ALTER USER'root'@'localhost'由'NEW-ROOT-PASSWORD'标识;
  4. 冲洗特权;

原因

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

2020年正确答案。我不能去要求一个密码MacOS的用户名
OrigamiEye

1

在终端机中运行这些行对我和其他遇到相同问题的人来说是成功的诀窍。这些命令在brew成功安装mysql之后在终端中列出。

mkdir -p ~/Library/LaunchAgents

cp /usr/local/Cellar/mysql/5.5.25a/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/

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

/usr/local/Cellar/mysql/5.5.25a/bin/mysqladmin -u root password 'YOURPASSWORD'

YOURPASSWORDroot的密码在哪里。


No such file or directory当我运行这些命令时,我才知道
代理Zebra

1

检查您的主目录中是否没有隐藏的.my.cnf。那是我的问题。


1

这对我来说适用于MAC https://flipdazed.github.io/blog/osx%20maintenance/set-up-mysql-osx

通过运行启动mysql

brew服务启动mysql

运行安装脚本

mysql_secure_installation

系统将要求您设置一个“验证密码”插件。输入y以执行此操作。

选择所需的密码验证(如果只是您使用数据库,那并不重要)

现在,为所有其余选项选择y:删除匿名。用户;禁止远程root登录;删除测试数据库;重新加载特权表。现在您应该收到一条消息

All done!



1

这对我有用。希望这也对您有用!!!跟着他们。

brew services stop mysql
pkill mysqld
# NB: the following command will REMOVE all your databases!
# Make sure you have backups or SQL dumps if you have important data in them already.
rm -rf /usr/local/var/mysql/
brew services restart mysql

mysql -uroot
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;

mysql -u root 
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password 
BY'YOUR_PASS_WORD!!!!';

2
您必须警告,运行rm -rf /usr/local/var/mysql/命令将删除计算机上的所有数据库和Mysql数据!
Lashae

0

通过brew安装mysql时的默认密码是root,请尝试使用此密码,它对我有用

mysql -uroot -proot


1
来自brew info mysql:我们安装的MySQL数据库没有root密码。要确保安全,请运行:mysql_secure_installation
ssc

@ssc在全新安装中设置密码的最佳方法。
alexventuraio

0

1号航站楼:

$ mysql_safe

2号航站楼:

$ mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('new-password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

在发布答案时这可能已经奏效,但与此同时却中断了。对于(当前)MySQL版本5.7.21,它会失败,并在“字段列表”中显示“未知列”密码”。
SSC

更新mysql.user SET authentication_string = PASSWORD('xxxxxx!')WHERE User ='root';
kevinc19年

0

我使用Catalina并使用此mysql_secure_installation命令,现在对我有用:

$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): << enter root here >>

我输入root当前密码

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

然后做剩下的


0

因此,如果有人的情况和配置与我相同,并且也将要发疯-这对我有用

一个很长的故事后,我有一个冲泡安装MariaDB的自动重启保存当我杀死它的进程(这是酿造的做),它一个root密码,我根本知道。

$ brew services list

显示如下:

mariadb started jdoe /path/to/homebrew.mxcl.mariadb.plist

使用以下命令停止MySQL服务器:

$ brew services stop mariadb

然后在没有 root用户的情况下再次启动它(并且不使用brew):

$ mariadbd --skip-grant-tables &

在这里,mysql_secure_installation由于的缘故对我不起作用--skip-grant-tables,并且由于没有,它也不需要,--skip-grant-tables因为它需要密码(我没有密码)。
尝试$(brew --prefix mysql)/bin/mysqladmin -u root password hunter2只返回奇怪的错误,什么也没做;$(brew --prefix mariadb)/bin/mysqladmin -u root password hunter2也没有用,给出了不同的错误,以及对我没有用的建议。

但是您现在无需凭据即可登录mysql:$ mysql

在这里,为root更新用户表的旧方法不起作用,因为“列'Password'不可更新”。
新方法alter user您使用BUT后才能使用flush privileges;
然后:
MariaDB [(none)]> alter user 'root'@'localhost' identified by 'hunter2';
MariaDB [(none)]>是MySQL提示这里)
然后做flush privileges;一次。
退出MySQL客户端。

现在,就brew而言,MariaDB仍未运行,因此可$ ps aux | grep -i mariadb用于查找pid及其它$ kill -9 <pid>
然后使用$ brew services start mariadb再次启动。


-1

使用init文件启动mysql来更改root密码。

brew services stop mysql
pkill mysqld
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'newRootPass';" > /tmp/mysql-init
$(brew --prefix mysql)/bin/mysqld --init-file=/tmp/mysql-init

您的根密码现已更改。确保正确关闭服务器以保存密码更改。在新的终端窗口中执行

mysqladmin -u root -p shutdown

并输入您的新通行证。

启动服务并删除init文件

brew services start mysql
rm /tmp/mysql-init

在mysql版本8.0.19上测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.