【问题标题】:mysql root password forgottenmysql root密码忘记了
【发布时间】:2012-04-21 15:50:53
【问题描述】:

我有一段时间没有使用 PHP MySQL,现在我需要再次使用它。但问题是我忘记了 MySQL 控制台的密码。尝试登录 PHPMyAdmin 时出现错误 #1045。

在MySQL站点看到一篇文章如何重置root密码(http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html#resetting-permissions-windows)

步骤是

create a mysql-init.txt file containing UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;

我保存为C:\me\mysql-init

我在命令提示符下写了--

C:\wamp\bin\mysql\mysql5.5.8\bin\mysqld --init-file=C:\me\mysql-init.txt 

我也尝试使用双反斜杠..但它不起作用。 MySQL 控制台要求输入密码,但它没有使用新密码。我究竟做错了什么?我那里有几张桌子。怎么办?

提前致谢。

【问题讨论】:

标签: mysql passwords root reset


【解决方案1】:

尝试使用 --skip-grant-tables 启动 mysql

mysqld --skip-grant-tables

然后在没有用户名/密码的情况下使用 mysql 命令行连接到您的 mysqld

shell> mysql

然后发出命令

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

【讨论】:

  • 非常感谢您的回复。它目前正在工作。现在我可以登录到 phpmyadmin 复制我要保存的所有表格。谢谢。但它没有占用稍后重新打开 wamp 服务器时的密码。我必须经历与 mysqld --skip-grant-tables 相同的过程。
  • 我安装的 mysql 版本没有密码列,而是这样工作:更新 mysql.user set authentication_string=password('MyNewPass') where User = 'root';
  • 未能将datadir设置为/var/lib/mysql/
  • 如果您的 sql 版本告诉您它不是“在 ('MyNewPass') 附近使用的正确语法”:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';
  • "Thank you very much for reply.It is working for the time being." - 在这种情况下,请接受答案,这将对以后阅读此问题的其他人有所帮助
【解决方案2】:

我无法在 Adelave 的工作回答中得到 mysqld。但这对我有用

使用 --skip-grant-tables 停止和启动 mysql

service mysql.server stop
service mysql.server start --skip-grant-tables

然后在没有用户名/密码的情况下连接到您的 mysqld

mysql

然后在mysql命令行上更新密码

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

然后正常重启mysql

 service mysql.server restart

【讨论】:

  • 这适用于 Mac OSX 10.9.1 上的 MySQL 5.6.16,它适用于我 ;-)
  • start -skip-grant-tables 命令抛出 错误!服务器退出而不更新PID文件错误..
  • ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to 在 Mysql 8 上
【解决方案3】:

如果其他答案没有帮助,您可以尝试卸载/重新安装 mysql。它适用于我的 ubuntu 服务器:

$sudo apt-get purge mysql*
$sudo apt-get autoremove
$sudo apt-get autoclean

更新分布

$sudo apt-get dist-upgrade

然后重新安装

$sudo apt-get install mysql-server

【讨论】:

    【解决方案4】:

    使用 SQLYog 可以执行命令

    • 用户创建

    CREATE USER 'tester'@'localhost' IDENTIFIED BY 'Pass123#d'
    
    • 授权

    GRANT ALL PRIVILEGES ON sakila.* TO 'tester'@'localhost'
    
    • 在 MySQL 8.0 中更改密码

    ALTER USER 'tester'@'localhost' IDENTIFIED BY 'Pass123#d'
    

    (或者如果你知道 authentication_string 直接将其设置为更新)

    UPDATE mysql.user 
        SET authentication_string='*F9B62579F38BE95639ACB009D79427F2D617158F'  
    WHERE USER='root'***
    

    低版本mysql修改密码

    GRANT USAGE ON *.\* TO 'tester'@'localhost' IDENTIFIED BY 'Pass123#d'
    SET PASSWORD FOR 'tester'@'localhost' = PASSWORD('Pass123#d');**
    

    【讨论】:

      【解决方案5】:

      以下是要遵循的步骤:

      1. 使用以下命令找到 MySQL 配置文件:$ mysql --help | grep -A 1 "Default options"

      在 Ubuntu 16 上,文件位置通常为 /etc/mysql/mysql.conf.d/mysqld.cnf

      1. 编辑配置文件使用:$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

      2. [mysqld] 块下添加skip-grant-tables 并保存更改。

      1. 重启 MySQL 服务:sudo service mysql restart

      2. 查看 MySQL 服务状态:sudo service mysql status

      1. 使用以下命令登录 mysql:$ mysql -u root

      2. 并更改root密码:

      mysql> 刷新权限;

      mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';

      1. 通过删除 skip-grant-tables 行或使用 #(哈希)对其进行注释来恢复 MySQL 配置文件更改。

      2. 最后重启 MySQL 服务,一切顺利。

      【讨论】:

      • 救生解决方案 :)
      【解决方案6】:

      Mac OS Mojave

      $ brew services stop mysql
      
      $ pkill mysqld
      
      // warning: deletes all tables
      $ rm -rf /usr/local/var/mysql/
      
      $ brew postinstall mysql
      
      $ brew services restart mysql
      
      $ mysql -u root
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      
      mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'p4ssword';
      Query OK, 0 rows affected (0.04 sec)
      
      mysql> exit
      Bye
      

      然后你就恢复正常了。

      $ sudo mysql -u root -p
      Enter password: 
      Welcome to the MySQL monitor.  Commands end with ; or \g.
      

      我不喜欢在我的.env 文件中看到root 这个词,所以我通常会在创建一个诸如www.hockeysticks.net 之类的网站之后这样做:

      #
      CREATE DATABASE hockeysticks;
      
      CREATE USER 'hockeysticks'@'localhost' IDENTIFIED BY 'hockeysticks';
      GRANT ALL PRIVILEGES ON hockeysticks.* TO 'hockeysticks'@'localhost';
      

      那么你的 localdev .env 文件就很简单了:

      DB_DATABASE=hockeysticks
      DB_USERNAME=hockeysticks
      DB_PASSWORD=hockeysticks
      

      注意:如果您需要保留数据库,请使用skip-grant-tables 方法。这有 3 个难点:

      1. 确保 MySQL 已停止,以便您可以使用 skip-grant-tables 重新启动它

      2. 确保您的密码更新 SQL 语法对于您的 MySQL 版本是正确的

      3. 确保在查询末尾附加FLUSH PRIVELEGES;

      【讨论】:

        【解决方案7】:

        使用 windows 命令提示符可以更改密码

        1. 转到windows+R并运行services.msc然后停止MySQL服务并右键单击查看MySQL的属性并根据需要复制路径--defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
        2. 使用文本ALTER USER 'root'@'localhost' IDENTIFIED BY 'Your New Password'; 创建文本文件reset.txt 并保存在C 驱动器中。
        3. 以管理员身份打开命令提示符,然后更改 MySQL 的安装目录"C:\Program Files\MySQL\MySQL Server 8.0\bin"
        4. 输入命令mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --init-file=C:\\reset.txt

        【讨论】: