在mac下安装mysql 5.7.13的版本,一段时间没有使用,后来就忘记了密码。mysql忘记root密码有好多方法可以找回,这里介绍一种通用的方法:
- 关闭mysql进程
- 以安全模式启动启程
- root无密码连接到mysql
- 修改root密码,刷新缓存
- 关闭安全模式
- 重启mysql进程
不幸的是在这次找回密码的过程中踩了不少的坑,主要是原因是因为mysql版本引起的,mysql 5.7.6是个分水岭,下面以mac os x系统为示例详细分析一下。
关闭mysql进程
如果你是使用dmg包安装的,可以通过界面直接关闭:System Preferences -> 打开mysql选项:

mac-os-x系统mysql管理界面
如果实在找不到正常关闭的方法,也可以尝试暴力的方法,UNIX系统都可以通过ps命令找出相应的mysql服务进程,然后通过kill命令杀死。形如:
ps -ef | grep mysql kill 进程号
以安全模式启动启程
mac os x系统下如果是用dmg包安装的mysql,可以在/usr/local/mysql找下找到相应的mysql文件、各种启动程序和管理工具。
$ cd /usr/local/mysql/bin $ sudo ./mysqld_safe --skip-grant-tables --skip-networking &
–skip-grant-tables 表示忽略权限表;–skip-networking表示禁止网络连接,这个很有用,因为以安全模式启动后,就可以无密码连接mysql了。
root无密码连接到mysql
$ ./mysql -u root
正常来讲安全模式启动后就可以连接上了。
修改root密码,刷新缓存
连接上mysql后就可以进行密码修改了,前面都还顺利,这边被坑到了。按照传统的方式
mysql> use mysql; mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
居然不行 !查看一下user表
mysql> select Host, User, Password from mysql.user; ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
字段Password不存在,估计就是版本的问题。早知道还是不要追求太新的版本了,用5.6的多好啊。o(╯□╰)o
上官方手册翻阅才发现5.7.5或者更早的版本才能用这个方法。5.7.6或者之后的版本要用alter命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
本以为这样应该就可以了,谁知道按照这个命令执行了一下,我去,还是不行。继续看手册,手册下面有提到如果前面还是不行,那么用了update修改语句:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost'; Query OK, 1 row affected, 1 warning (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 1
mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.03 sec)
这个终于可以了,肉流满面啊,/(ㄒoㄒ)/~~
参考mysql手册:http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
关闭安全模式
如果找不到正常的方式,可以通过ps找到相应的进程,然后直接kill。比较暴力,但也是一种方法。
重启mysql进程
接下来正常启动mysql进程就可以了,再用新密码连接就可以了。
转载请注明:快乐编程 » mac os x忘记mysql 5.7.13 root密码