【问题标题】:How to change the mysql root password如何更改mysql的root密码
【发布时间】: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

标签: mysql linux passwords redhat


【解决方案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"

    1. 以管理员身份登录系统。

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

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

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

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

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

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

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

    6. 使用特殊的 --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 设置。

    7. 服务器启动成功后,删除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;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-12-14
              • 2013-05-09
              • 2010-09-17
              • 1970-01-01
              • 2023-03-22
              相关资源
              最近更新 更多