自动生成临时密码后无法访问 MySQL

Unable to access MySQL after it automatically generated a temporary password

我已经删除并安装了 OSX 10.11 El Capitan,并且我一直在关注 this tutorial to get MySQL up and running on the new OS X. The first step was to download MySQL For Mac OS X 10.9 (x86, 64-bit), DMG Archive(在 10.11 上工作,他们在教程中推荐)。当我完成安装 MySQL 时,我收到消息说:

2015-10-25T02:10:54.549219Z 1 [Note] A temporary password is generated for root@localhost: R>gFySuiu23U

If you lose this password, please consult the section How to Reset the Root Password in the MySQL reference manual.

太奇怪了,我从来没有见过那种消息。之后,我通过首选项窗格启动 MySQL,然后在终端上使用 /usr/local/mysql/bin/mysql -v 命令进行下一步。我收到一条错误消息:

ERROR 1045 (28000): Access denied for user 'cheetah'@'localhost' (using password: NO)

我也尝试过使用 root 作为用户名和空白密码通过 Sequel Pro 访问数据库,我收到访问被拒绝的消息说:

Unable to connect to host 127.0.0.1 because access was denied.

Double-check your username and password and ensure that access from your current location is permitted.

MySQL said: Access denied for user 'root'@'localhost' (using password: NO)

好的,我也再次尝试使用 root 作为用户名,但 'R>gFySuiu23U' 作为密码(由 MySQL 生成)。我收到连接失败消息说:

Unable to connect to host 127.0.0.1, or the request timed out.

Be sure that the address is correct and that you have the necessary privileges, or try increasing the connection timeout (currently 10 seconds).

MySQL said: Your password has expired. To log in you must change it using a client that supports expired passwords.

我该如何解决这个问题?我记得 MySQL 从来没有像这样自动生成一个临时密码,不是吗?

试试这个:

mysql -u root -h 127.0.0.1 -p
Enter password: (enter the random password here)

参考:https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html

之后,您可以使用 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';

解决此问题的另一种方法是使用旧版本的 MySQL。

我已经为 Mac OS X 10.9(x86,64 位)卸载了 MySQL version 5.7.9,DMG Archive,然后安装旧版本,MySQL version 5.6.7 Mac OS X 10.9(x86,64 位),DMG 存档。这个问题解决了。在完成旧版本安装之前给定的自动生成的密码消失了,我最终可以使用 root 作为用户名和空白密码访问数据库。一切都很顺利!

既然生成的密码 MySQL 已过期,问题就简化为让此密码再次生效 (1) 或生成一个新密码 (2)。这可以通过 运行 MySQL 和 skip-grant-tables 选项来完成,这将使它忽略访问权限:

  1. 停止您的 MySQL 服务器。

  2. 在 my.cnf 文件的 [mysqld] 部分末尾添加以下内容并保存。

    skip-grant-tables

  3. 启动 MySQL 服务器。

  4. 在终端中,输入

    mysql -u root -p

进入 MySQL 命令提示符。

  1. 在命令提示符中,键入

    USE mysql;

进入 mysql 数据库,它保留数据库用户。

  1. 类型

    UPDATE user SET password_expired = 'N' WHERE User = 'root';

让 MySQL 知道密码未过期 (1) 或

UPDATE user SET authentication_string = PASSWORD('YourNewPassword'), password_expired = 'N' WHERE User = 'root';

将新密码 YourNewPassword 分配给 root (2)。

答案 7 对我有用:El capitanMySQL 从 dmg 和自动生成的密码安装,但确保在输入 [=14= 之前 cd/usr/local/bin/mysql ] 很明显,但我第一次没有。

现在要查找我所有的数据库和表的位置以及如何link它们。

这对我在 OS X Yosemite 运行 MySql v5.7(从 .dmg 安装)上有用。

cd /usr/local/mysql/bin
./mysql -u root -p --connect-expired-password

(输入安装程序生成的临时密码。)

这会让你进入 sandbox mode and mysql> prompt. Then set desired root password with SET PASSWORD:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mySuperSecretPassword');

对于Mysql 5.7 我用

shell $ > sudo grep 'temporary password' /var/log/mysqld.log

在 OSX 10.11 El Capitan 和 MySQL 5.7.X 下执行这些步骤应该可以解决问题。

考虑到您已经安装了 MySQL 那么..

打开终端 window 并输入:

  1. sudo /usr/local/mysql/support-files/mysql.server 停止
  2. sudo mysqld_safe --skip-grant-tables

由于在步骤 2 中触发的命令将处于运行状态,您需要打开另一个终端 window 然后输入:

  1. mysql -u root -p
  2. UPDATE mysql.user SET password_expired='N', authentication_string=PASSWORD('') WHERE User='root';
  3. 退出;
  4. sudo /usr/local/mysql/support-files/mysql.服务器重启

重要提示:在步骤 2 中,您必须替换为您的密码。

希望对你有用。

我正在 运行ning macOS Sierra(10.12.3) 并且我安装了 mysql-5.7.17-macos10.12-x86_64.dmg.

@lesley 的回答对我有用,但我需要添加 ./ 以确保我在当前工作目录中调用 mysql 二进制文件。这是安装上述软件包的地方。

如果您 cd/usr/local/mysql/bin 和 运行 mysql -u root -p --connect-expired-password,您可能会收到以下错误。

mysql: unknown option '--connect-expired-password'

我做到了。因为只是 运行ning mysql 没有提供路径,调用了以前安装的 MariaDB 客户端版本。

因此,为确保执行正确的二进制文件,您可以

提供绝对路径

/usr/local/mysql/bin/mysql -u root -p --connect-expired-password

或更改目录后的相对路径

cd /usr/local/mysql/bin
./mysql -u root -p --connect-expired-password

两种方式都应该有效。连接到客户端后,说明与@lesley 的上述说明相同。

输入安装程序生成的临时密码并设置新密码。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourNewPassword'); 

MySQL密码过期

重置密码将暂时解决问题,但是,从 MySQL 5.7.4 到 5.7.10(我认为鼓励更好的安全性)default_password_lifetime 变量的默认值为 360 (大约一年)。对于这些版本,如果您不更改此变量(或个人用户帐户),所有用户密码将在 360 天后过期。

通常,您可能会从脚本中收到消息:"Your password has expired. To log in you must change it using a client that supports expired passwords."

因此,为了防止密码自动过期,请以 root (mysql -u root -p) 身份登录,然后,对于 自动连接到服务器的客户端 (例如脚本。)更改这些客户端的密码过期设置:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;

您可以为所有用户禁用自动密码过期:

SET GLOBAL default_password_lifetime = 0;

链接:

MySQL: Password Expiration and Sandbox Mode
MySQL: Password Expiration Policy
Password expiration policy in MySQL Server 5.7

我安装了 view brew,在我注意到这个警告之前,我收到了相同的错误消息:

We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation

To connect run: mysql -uroot

To have launchd start mysql now and restart at login: brew services start mysql

Or, if you don't want/need a background service you can just run: mysql.server start

我遇到了同样的问题。我按照 https://www.ntu.edu.sg/home/ehchua/programming/sql/MySQL_HowTo.html 中的安装过程指南下载了 DMG 存档并在我的 MAC OS X 10.12.2.

上安装了 MySQL

终于在新终端上执行了以下命令。

cd /usr/local/mysql/bin

./mysql -u root -p --connect-expired-password

成功了。

我通过 运行 解决了这个问题 'mysql -u root -p --connect-expired-password' 然后输入来自mysql的过期自动生成密码。终于进去了。Selected mysql db with 'use mysql' 然后用更新用户 'root' pw 'ALTER USER 'root'@'localhost' IDENTIFIED BY 'your new password'

这个特别的方法对我有用:

在此 link 中指定:https://www.variphy.com/kb/mac-os-x-reset-mysql-root-password

执行除执行之外的所有步骤

    UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';

执行

    UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';

然后执行 刷新权限;

首次通过下载软件包手动安装 MySQL 会生成 root 的默认密码。复制并保存。如果在连续的重新安装中没有以某种方式完成,它不会显示该密码。

因此您无法登录root。 执行以下操作:

  1. 从系统中查找 mysql 个相关条目 sudo find / -name mysql
  2. 通过执行 rm -rf <mysql_entries_above>
  3. 删除所有 mysql 相关条目
  4. 下载最新的mysql服务器并安装它。
  5. 系统会提示您输入默认密码,您需要复制该密码。
  6. 运行 mysql_secure_installation 并在询问 root 时粘贴该密码。
  7. 随后按照步骤操作并在系统提示时更改管理员密码。

如果您之前安装了 mysql,可能会出现这种情况。 尝试使用您为 mysql 的最新版本设置的密码。 这对我有用。

重新启动 Mysql 服务器对我有用。

但是在Mysql80-Server中,比5.7复杂多了。在 MySQL80 中,不允许您在 my.cnf 中的配置期间更新或更改密码,状态为“skip grant table”。所以你需要做3大步骤

I) 将 my.cnf 更改为 skip-grant-table

II) 使用空白密码登录MySQL & 更新table为空白密码

III) 重新启动mysql并使用空白密码登录并更新为新密码

步骤:(无论如何,您忘记了 root 密码,通过安装生成的临时密码不起作用等。请按照以下步骤操作)在我的 FreeBSD 12.2 上

  1. 通过

    停止您的mysql服务器
    /usr/local/etc/rc.d/mysql-server stop
    
  2. 再检查一下是否真的停止了(万一有比这更严重的问题)

    /usr/local/etc/rc.d/mysql-server status
    
    mysql is not running.
    
  3. 找到您的 my.cnf 文件并向其中添加“skip-grant-tables”。 (一般在[Mysqldump]头之前)

  4. 重启mysql

    /usr/local/etc/rc.d/mysql-server start
    
  5. 登录mysql

    mysql -u root -p
    

    当它要求输入密码时,只需按回车键即可登录 mysql

  6. select 要使用的数据库

    use mysql
    
  7. 查看table用户

    select user, authentication_string,password_expired from user;
    
  8. 更新为空白密码

    UPDATE user SET authentication_string = '', password_expired='N' WHERE User = 'root'; 
    
  9. 退出mysql并使mysql停止

  10. goto file my.cnf then take "skip-grant-tables" out of file.

  11. 重新启动mysql 再次使用“mysql -u root -p”输入空白密码

  12. 然后

ALTER USER 'root'@'localhost'   IDENTIFIED WITH
    caching_sha2_password BY 'YourNewPassword';
  1. 退出mysql并使mysql停止
  2. 重新启动 mysql 然后您将使用新密码登录