如何更改mysql的root密码

Posted

技术标签:

【中文标题】如何更改mysql的root密码【英文标题】:How to change the mysql root password 【发布时间】:2012-02-06 01:16:10 【问题描述】:

我已经在 redhat linux 上安装了 mysql server 5。我无法以 root 身份登录,因此无法更改 root 密码。

mysql -u root -p  
Enter password:  <blank>
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
(using password: NO)

当我尝试这样设置时:

mysqladmin -u root password 'newpass'

我收到一个错误:

mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' 
(using password: NO)'

好像设置了root密码。

我也尝试过使用(描述here)重置密码

/sbin/service mysqld start --skip-grant-tables

然后制作:

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

我什至卸载了 mysql-server(使用 yum),然后重新安装了它,但这并没有帮助。

如何强制重置root密码?

【问题讨论】:

检查您的 mysqld 是否已安装、启用并使用命令:sudo service mysqld status 【参考方案1】:

一种选择是将UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root'; 保存到文件中,然后使用--init-file=FILENAME 手动启动mysqld。一旦服务器启动,它应该重置您的密码,然后您应该可以登录。之后,您应该关闭服务器并正常启动它。

【讨论】:

天哪,为什么有人会给我发现唯一可行的解​​决方案-1。一个 init sql 文件是我可以覆盖 mysql root 用户密码并能够使用它的唯一方法。遗憾的是,您需要在新安装的软件上回退到此类操作,但最好有一个可靠的解决方法。 sudo mysql service stop &amp;&amp; echo "UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root';" &gt; /tmp/reset.sql &amp;&amp; sudo /etc/init.d/mysql start --init-file=/tmp/reset.sql【参考方案2】:

游戏有点晚了,但我在安装树莓派时遇到了同样的问题,发现它需要提升。在密码更改的前面添加 sudo 可以使其正常工作。

sudo mysqladmin -u root password 'newpass'

随后是提升的 sql 访问权限

sudo mysql -u root -p  

如果其中任何一个都没有作为 sudo 运行,它将失败。

【讨论】:

虽然我没有使用mysqladmin,但sudo mysql -u root -p 为我工作。【参考方案3】:

root用户密码默认为空字符串。

(using password: NO) 说没有密码。

您是否尝试从其他系统登录?我想你只能在本地以 root 用户身份登录。

【讨论】:

我是否需要成为系统的root才能成为mysql服务器的root? 我不确定,但我不这么认为。不幸的是,我从未使用过 redhat... 编辑:但你为什么不试试呢? 请注意,如果您想尝试不使用密码登录,您应该完全避免在命令行中指定-p 注意:默认情况下root密码可能不是空白的,现在(刚刚发现)。我从 yum 存储库安装了 MySQL 5.7.16,发现安装程序创建了一个临时密码,该密码存储在纯文本文件中:P(对于 yum,这是 /var/log/mysqld.log)【参考方案4】:

我删除了MySQL安装并删除了数据文件,然后重新安装。

然后我就可以设置root密码了。一旦您将root密码设置为某事。如果你不知道,mysqladmin不会让你重置它。

要重置它,您必须对 mysqld 的执行方式拥有所有权,并为其提供一个 init 文件以更改 root 密码: https://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

【讨论】:

【参考方案5】:

这有助于我在 Windows 上使用 MySQL Server 5.6。确保将mysqld 路径更改为指向安装MySql Server 的位置,对我来说是"C:\Program Files\mysql\MySQL Server 5.6\bin\mysqld.exe"

    以管理员身份登录系统。

    如果 MySQL 服务器正在运行,请停止它。对于一个服务器 作为 Windows 服务运行,请转到服务管理器: 从开始菜单中选择控制面板,然后 管理工具,然后是服务。找到 MySQL 列表中的服务并停止它。

    如果您的服务器没有作为服务运行,您可能需要使用 任务管理器强制它停止。

    创建一个包含以下语句的文本文件。 将密码替换为您要使用的密码。

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;
    

    将 UPDATE 和 FLUSH 语句分别写在一行上。 UPDATE 语句重置所有 root 帐户的密码,FLUSH 语句告诉服务器将授权表重新加载到内存中,以便它注意到密码更改。

    保存文件。对于此示例,文件将命名为 C:\mysql-init.txt

    打开控制台窗口以进入命令提示符:从“开始”菜单中选择“运行”,然后输入 cmd 作为要运行的命令。

    使用特殊的 --init-file 选项启动 MySQL 服务器(注意选项值中的反斜杠加倍):

    C:\> C:\mysql\bin\mysqld --init-file=C:\\mysql-init.txt
    

    如果您将 MySQL 安装到 C:\mysql 以外的位置,请相应地调整命令。

    服务器在启动时执行由 --init-file 选项命名的文件的内容,更改每个 root 帐户密码。

    如果您希望服务器输出显示在控制台窗口而不是日志文件中,您还可以在命令中添加 --console 选项。

    如果您使用 MySQL 安装向导安装 MySQL,您可能需要指定 --defaults-file 选项:

    C:\> "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld.exe"
         --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.ini"
         --init-file=C:\\mysql-init.txt
    

    可以使用服务管理器找到适当的 --defaults-file 设置:从开始菜单中选择控制面板,然后选择管理工具,然后选择服务。在列表中找到 MySQL 服务,右键单击它,然后选择 Properties 选项。 Path to executable 字段包含 --defaults-file 设置。

    服务器启动成功后,删除C:\mysql-init.txt。

http://docs.oracle.com/cd/E17952_01/refman-5.5-en/resetting-permissions.html

【讨论】:

【参考方案6】:

从您的命令中删除 -p。 -p 强制提示输入密码。

使用: mysql -u root

这将解决您的问题。

【讨论】:

只有在没有root密码的情况下才有效。如果设置了root密码,则必须提供。【参考方案7】:

这里可能有点晚了,但这是我所做的:

创建文件resetpass.sh :

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

# mysqld_safe --init-file=resetpass.sh

# service mysqld start --skip-grant-tables

# mysql -u root -p

输入密码

mysql >  change root pass ; flush privs; 

退出

# restart mysql service 

我使用的MySQL版本是centos6下的5.1.73

【讨论】:

【参考方案8】:

试试这个:

mysql -u root

然后:

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
    ->                   WHERE User='root'; 

mysql> FLUSH PRIVILEGES;

对我来说很好用!

【讨论】:

【参考方案9】:

根据文档,在 MySQL 5.7 中,临时密码被放入 /var/log/mysqld,但在 5.6 中显然不是这种情况。

在 RHEL 6.7 上安装 MySQL 5.6 后,我终于发现安装时设置的临时 root 密码放在了文件/root/.mysql_secret 中。

【讨论】:

【参考方案10】:

打开mysql

现在输入以下命令:

use mysql;

update user set PASSWORD=password("updated password")  where User='root';

flush privileges;

【讨论】:

以上是关于如何更改mysql的root密码的主要内容,如果未能解决你的问题,请参考以下文章

如何MySQL和MariaDB数据库修改root密码

如何更改mysql的root密码

mysql 如何更改当前非root用户的密码

MySQL:如何重置或更改 MySQL root 密码?

如何更改mysql root用户密码

如何在 CentOS7 上更改 MySQL root 帐户密码?