自动生成临时密码后无法访问MySQL
我已经删除并安装了OSX 10.11 El Capitan
并且我一直在通过本教程学习如何在新的OS X上运行MySQL
。第一步是下载MySQL For Mac OS X 10.9(x86,64位),DMG归档 (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.
这很奇怪,我从来没有见过这样的信息。 之后,我通过Preference Pane启动MySQL,然后在terminal上使用/usr/local/mysql/bin/mysql -v
命令进行另一步。 我收到一条错误消息,说:
ERROR 1045 (28000): Access denied for user 'cheetah'@'localhost' (using password: NO)
我也尝试通过Sequel Pro
使用root作为用户名和空密码访问数据库,我得到了访问被拒绝的消息,说:
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';
重置您的密码ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password';
现在MySQL已经生成的密码已经过期,问题是减less到获得这个密码再次工作(1)或生成一个新的(2)。 这可以通过使用skip-grant-tables选项来运行MySQL来完成,这会使其忽略访问权限:
-
停止你的MySQL服务器。
-
在my.cnf文件的[mysqld]部分末尾添加skip-grant-tables并保存。
-
启动MySQL服务器。
-
在terminal中,input
mysql -u root -p
进入MySQL命令提示符。
-
在命令提示符下键入
USE mysql;
进入数据库用户的mysql数据库。
-
types
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分配给根(2)。
这是在OS X Yosemite上运行MySql v5.7(从.dmg安装)的工作原理。
cd /usr/local/mysql/bin mysql -u root -p --connect-expired-password
(input安装程序生成的临时密码。)
这使你进入沙盒模式和mysql>
提示符。 然后用SET PASSWORD设置所需的root密码:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mySuperSecretPassword');
在OSX 10.11 El Capitan和MySQL 5.7.X下执行这些步骤,应该可以做到。
考虑到你已经安装MySQL然后..
打开terminal窗口并键入:
- sudo /usr/local/mysql/support-files/mysql.server stop
- sudo mysqld_safe –skip-grant-tables
由于在步骤2中触发的命令将处于持续状态,因此需要打开另一个terminal窗口,然后键入:
- mysql -u root -p
- UPDATE mysql.user SET password_expired ='N',authentication_string = PASSWORD('')WHERE User ='root';
- 放弃;
- sudo /usr/local/mysql/support-files/mysql.server重新启动
重要提示 :在步骤2中,您必须更换密码。
希望它会为你起作用。
我正在运行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'
我做了。 因为只需运行mysql
而不提供path,就称之为以前安装的MariaDB客户端版本。
所以要确保你正在执行正确的二进制文件,你也可以
提供绝对path
/usr/local/mysql/bin/mysql -u root -p --connect-expired-password
或改变目录后的相对path
cd /usr/local/mysql/bin ./mysql -u root -p --connect-expired-password
这两种方式应该工作。 一旦连接到客户端,指令与@lesley中的相同。
input安装程序生成的临时密码并设置新密码。
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourNewPassword');
MySQL密码已过期
重置密码将暂时解决问题,但是,从MySQL 5.7.4到5.7.10(我认为为了提高安全性), default_password_lifetime
variables的默认值是360(一年)。 对于这些版本,如果您不对此variables(或个人用户帐户)进行更改,则所有用户密码将在360天后过期。
通常情况下,您可能会从脚本中收到以下消息:“您的密码已过期。要login,您必须使用支持过期密码的客户端进行更改。
因此,要防止自动密码过期,请以root身份( mysql -u root -p
)login,然后为自动连接到服务器的客户端 (例如脚本)更改这些客户端的密码到期设置:
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;
或者您可以禁用所有用户的自动密码过期:
SET GLOBAL default_password_lifetime = 0;
链接:
MySQL:密码过期和沙盒模式
MySQL:密码过期政策
MySQL服务器5.7中的密码过期策略
我面临同样的问题。 我遵循https://www.ntu.edu.sg/home/ehchua/programming/sql/MySQL_HowTo.html的安装过程指南,下载了DMG压缩文档,并在我的MAC OS X 10.12.2上安装了MySQL。
最后在新的terminal上执行以下命令。
cd /usr/local/mysql/bin ./mysql -u root -p --connect-expired-password
有效。
回答7为我工作: El capitan
,从dmg安装的MySQL
和自动生成的密码,但是在进入./mysql -root -p
之前,确保cd
到/usr/local/bin/mysql
显然,但是我并没有第一次。
现在find我所有的数据库和表格,以及如何链接它们。
对于Mysql 5.7我使用
shell $> sudo grep'临时密码'/var/log/mysqld.log
解决这个问题的另一种方法是使用旧版本的MySQL。
我卸载了Mac OS X 10.9(x86,64位)的MySQL version 5.7.9
,DMG Archive,然后安装旧版本,用于Mac OS X 10.9(x86,64位)的MySQL version 5.6.7
,DMG Archive 。 这个问题解决了。 在完成这个旧版本的安装之前,给定的自动生成的密码已经不存在了,我最终可以使用root作为用户名和空密码来访问数据库。 一切都像魅力一样工作!
我安装了视图brew,我有相同的错误信息,直到我注意到这个警告:
我们已经安装了你的MySQL数据库,没有root密码。 为了确保它运行:mysql_secure_installation
连接运行:mysql -uroot
现在启动mysql,并在login时重新启动:brew服务启动mysql
或者,如果你不想/需要一个后台服务,你可以运行:mysql.server start
我通过运行'mysql -u root -p --connect-expired-password'
解决这个问题,然后从mysql中input过期的自动密码。 最后进来了。selectMySQL数据库与'use mysql'
,然后更新用户'root'PW与'ALTER USER 'root'@'localhost' IDENTIFIED BY 'your new password'