【问题标题】:How do I find out my root MySQL password?如何找到我的根 MySQL 密码?
【发布时间】:2011-08-06 16:34:53
【问题描述】:

我刚刚在 Ubuntu 上安装了 MySQL,root 用户无法登录 :)

如何找回或找出我的密码?使用空白作为密码不起作用。

【问题讨论】:

    标签: mysql ubuntu


    【解决方案1】:

    您可以通过使用--skip-grant-tables 运行服务器来重置root 密码,并通过以root 身份(或使用sudo)运行以下命令而不使用密码登录:

    # service mysql stop
    # mysqld_safe --skip-grant-tables &
    $ mysql -u root
    
    mysql> use mysql;
    mysql> update user set authentication_string=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> quit
    
    # service mysql stop
    # service mysql start
    $ mysql -u root -p
    

    现在您应该可以使用新密码以 root 身份登录了。

    在重设密码的用户的/home/$USER/.mysql_history/root/.mysql_history中也可以找到重设密码的查询,但上述方法始终有效。

    注意:在 MySQL 5.7 之前,该列被称为 password 而不是 authentication_string。将上面的行替换为

    mysql> update user set password=PASSWORD("YOUR-NEW-ROOT-PASSWORD") where User='root';
    

    【讨论】:

    • @Benjamin 我在你的回答中做了所有的步骤,但我仍然得到用户'root'@'localhost'的访问被拒绝 - 任何想法为什么?
    • 对于 MySql 5.7:更新 mysql.user SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
    • 在尝试了所有这些多次之后,以及下面的 dpkg 方法,并且对没有任何效果感到非常沮丧(顺便说一句,我使用 16.04 和 mysql-sever-5.7),我注意到 mysql 会如果我使用 sudo 连接,请接受我的新凭据。即sudo mysql -u root -p 没有 sudo 我得到Access denied for user 'root'@'localhost'。我以前从来没有使用过 sudo,我没有看到这里提到它,但经过一个令人沮丧的小时后,这似乎是解决方案。
    • @Matt 在这里也一样。在使用 mysql 之前,我从来没有使用过sudo,现在我必须使用吗?我不明白为什么我必须是 root linux 用户才能访问 mysql 中的 root 帐户。这种行为让我更想起了 postgresql。
    • 对于只能以 shell root 身份登录的任何人,请查看askubuntu.com/questions/766334/…
    【解决方案2】:

    我意识到这是一个旧线程,但我想我会用我的结果更新它。

    Alex,听起来您是通过元数据包“mysql-server”安装 MySQL 服务器的。这将通过引用安装最新的包(在我的例子中,mysql-server-5.5)。我和你一样,没有像我预期的那样在设置时提示输入 MySQL 密码。我想有两个答案:

    解决方案 #1:使用全名安装 MySQL:

    $ sudo apt-get install mysql-server-5.5
    

    或者

    解决方案 #2:重新配置包...

    $ sudo dpkg-reconfigure mysql-server-5.5
    

    您必须指定完整的包名称。使用元包'mysql-server'对我来说没有想要的结果。我希望这对某人有帮助:)

    参考:https://help.ubuntu.com/12.04/serverguide/mysql.html

    【讨论】:

    • 谢谢!我一直在尝试sudo dpkg-reconfigure mysql-server,但没有成功。
    • 这成功了,但没有要求我在 Ubuntu 18.04 中输入 mysql 的 root 密码:sudo dpkg-reconfigure mysql-server-5.7
    • 是的,同样运行 5.7 并且重新配置不要求输入 root 密码...?什么给出,什么是默认值?
    【解决方案3】:
    sudo mysql -u root
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD_HERE';
    FLUSH PRIVILEGES;
    
    mysql -u root -p # and it works
    

    【讨论】:

    • 这是在 ubuntu 16.04 LTS 上对我有用的唯一解决方案
    • 谢谢。你的解决方案对我有用。帖子的作者应该指定了他的 MySQL 版本。我的是5.7.27
    【解决方案4】:

    Ubuntu 14.04 上的 MySQL 5.5 需要的命令与推荐的 here 略有不同。简而言之:

    sudo /etc/init.d/mysql stop
    sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
    mysql -u root
    

    然后从 MySQL 提示符

    FLUSH PRIVILEGES;
    SET PASSWORD FOR root@'localhost' = PASSWORD('password');
    UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
    FLUSH PRIVILEGES;
    

    the cited source 也提供了另一种方法。

    【讨论】:

    • 您能否提供帮助并详细说明以下具体内容? --skip-grant-tables --skip-networking & 处理客户请求对我很有帮助,但我想了解它,以便评估风险。谢谢!
    • skip-grant-tables 当然需要谨慎,因为任何有权访问服务器的人都可以访问实例的所有模式。 skip-networking 我认为问题不大,但您应该自己评估。如果我尝试在没有当前 root 密码的情况下重置 root 密码,我认为自己已经处于安全泡菜中:)。不确定是否有更“安全”的方法。
    • 我得到这个错误 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) [1]+ Exit 1 sudo / usr/sbin/mysqld --skip-grant-tables --skip-networking
    【解决方案5】:

    对于 RHEL-mysql 5.5:

    /etc/init.d/mysql stop
    
    /etc/init.d/mysql start --skip-grant-tables
    
     mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
     mysql> FLUSH PRIVILEGES;
     mysql> exit;
    
    mysql -uroot -pnewpwd
    
    mysql>  
    

    【讨论】:

    • 您的答案可能会更冗长。请解释您建议的命令的作用。
    【解决方案6】:

    嗯,Mysql 5.7.13 重置我所做的一切是:

    $ sudo service mysql stop 停止mysql

    $ mysqld_safe --skip-grant-tables &启动mysql

    $ mysql -u root

    就像正确答案一样。然后我所做的就是做@eebbesen 所做的事情。

    mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('NEW-password-HERE');

    希望它可以帮助任何人:)

    【讨论】:

      【解决方案7】:

      这是设置 root 密码的最佳方法:Source Link 第 3 步对我来说非常有效。

      给你的命令

      1. sudo mysql
      2. SELECT user,authentication_string,plugin,host FROM mysql.user;
      3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
      4. 刷新特权;
      5. SELECT user,authentication_string,plugin,host FROM mysql.user;
      6. 退出

      现在您可以使用 root 用户的密码是 'password' :

      1. mysql -u root -p
      2. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
      3. 将所有权限授予 . 到 'sammy'@'localhost' 并使用 GRANT 选项;
      4. 刷新特权;
      5. 退出

      测试您的 MySQL 服务和版本:

      systemctl status mysql.service
      sudo mysqladmin -p -u root version
      

      【讨论】:

        【解决方案8】:

        在 MYSQL 5.7 下,如果您使用 mysql 进行开发,只需:

        1.杀死mysql:

        $ sudo service mysql stop
        

        2.在--skip-grant-tables模式下启动mysql:

        $ sudo mysqld_safe --skip-grant-tables 
        

        此外,您可以尝试在“skip-grant-table”模式下更改用户表,但我失败了。

        所以,这只是一种解决方法。

        【讨论】:

          【解决方案9】:

          有一个简单的解决方案。

          MySql 5.7 自带匿名用户,所以需要重新配置 MySQL 服务器。

          你可以用这个命令做到这一点

          尝试查找临时通行证:

          grep 'temporary password' /var/log/mysqld.log
          

          然后:

          sudo mysql_secure_installation
          

          此链接上有更多关于 mysql 5.7 的信息

          https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html

          【讨论】:

          • 我同意你的看法。
          【解决方案10】:

          其实很简单。你不必经历很多事情。 只需在终端中运行以下命令并按照屏幕上的说明进行操作即可。

          sudo mysql_secure_installation
          

          【讨论】:

          • 错误答案。你没有回答问题。
          【解决方案11】:

          我将在这里做一些假设,因为我不确定。我认为我的 MySQL(在最新的 20.04 升级版上运行)甚至没有根。我试过设置一个,我记得有问题。我怀疑没有 root 用户,如果你以 root 身份登录,它会自动以 MySQL root 用户身份登录。

          我为什么会这样想?因为当我执行 MySQL -u root -p 时,它会接受任何密码并在我以 root 身份登录时以 MySQL root 用户身份登录。

          我已确认在非 root 用户上尝试此操作无效。

          我喜欢这个模型。

          EDIT 2020.12.19: 对我来说,为什么如果您以 root 用户身份登录,您会以 root 用户身份登录 MySQL,这不再是一个谜。它与身份验证类型有关。更高版本的 MySQL 配置了 MySQL 插件“auth_socket”(也许您已经注意到系统上的 /run/mysqld/mysqld.sock 文件并想知道它)。该插件使用库 auth_socket.so 提供的 SO_PEERCRED 选项。

          如果需要,您可以通过创建/更新密码来恢复密码身份验证。为了清楚起见,在下面显示了两种方式和选项。

          创建用户 'valerie'@'localhost' 用 auth_socket 识别;
          CREATE USER 'valerie'@'localhost' IDENTIFIED BY 'password';

          【讨论】:

            猜你喜欢
            • 2012-11-29
            • 1970-01-01
            • 2010-09-05
            • 2012-06-09
            • 1970-01-01
            • 2011-03-03
            • 1970-01-01
            • 2013-07-20
            • 2011-12-17
            相关资源
            最近更新 更多