注意:MySQL的root用户和服务器操作系统的root用户是两个不同的用户,不要搞混了。
安全模式重置法
基本的思路是,以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后重设密码。
首先,我们停掉MySQL服务:
sudo service mysql stop
以上命令适用于Ubuntu和Debian。CentOS、Fedora和RHEL下使用mysqld替换mysql。
以安全模式启动MySQL:
sudo mysqld_safe --skip-grant-tables --skip-networking &
注意我们加了--skip-networking
,避免远程无密码登录 MySQL。
这样我们就可以直接用root登录,无需密码:
mysql -u root
接着重设密码:
mysql> use mysql;
mysql> update user set password=PASSWORD("mynewpassword") where User='root';
mysql> flush privileges;
注意
我的mysql版本 MYSQL V5.7.9,旧版本请使用:
1
|
UPDATE mysql. user SET Password = PASSWORD ( '新密码' ) WHERE User = 'root' ; |
,命令后需要加分号。
重设完毕后,我们退出,然后启动 MySQL 服务:
mysql > quit
quit不需要分号。
重启服务:
sudo service mysql restart
同样,以上命令适用于Ubuntu和Debian,Centos、Fedora和RHEL需要用mysqld
替换mysql
。
现在可以尝试用新密码登录了:
mysql -u root -pmynewpassword
注意,
-p
和密码间不能有空格。Mac OS X – 重置 MySQL Root密码
密码太多记不住??你是否忘记了Mac OS 的MySQL的root密码? 通过以下4步就可重新设置新密码:
1. 停止 mysql server.
通常是在 ‘系统偏好设置’ > MySQL > ‘Stop MySQL Server’
2. 打开终端,输入:
1sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
3. 打开另一个新终端,输入:
1234567sudo /usr/local/mysql/bin/mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
FLUSH PRIVILEGES;
exit
4. 重启MySQL.
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)C:\Program Files\MySQL\MySQL Server 5.7\bin>mysqladmin -u root flush-privileges
password “newpassword”
mysqladmin: [Warning] Using a password on the command line interface can be inse
cure.
Warning: Since password will be sent to server in plain text, use ssl connection
to ensure password safety.
mysqladmin: unable to change password; error: ‘Operation ALTER USER failed for ‘
root’@’skip-grants host”
其他方案
以上是通用方案,在Ubuntu和Debian系统上,有一个debian-sys-maint
用户,Debian类系统下一些系统脚本对mysql的操作是通过这个用户完成的。所以我们可以通过这个用户来修改 root
密码。该用户的密码可以在/etc/mysql/debian.cnf
下找到:
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = debian-sys-maint
password = PASSWORD
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = PASSWORD
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
用该用户登录 MySQL 后,也可以修改密码(具体修改过程见上):
sudo mysql -u debian-sys-maint -p
mysql:Windows修改MySQL数据库密码(修改或忘记密码)
以实际操作修改root密码为例,操作系统为windows
这里我们需要注意的是,修改MySQL是需要MySQL中的root权限,一般用户是无法更改的,除非请求管理员。
修改密码的三种简单方法
第一种用SET PASSWORD命令
1.打开cmd进入MySQL的bin目录;(如我的路径是F:\MySQL\mysql-5.7.24-winx64\bin)
2.通过输入命令 mysql -u root -p 指定root用户登录MySQL,输入后回车会提示输入密码,输入我们原来的密码然后回车。
3.修改MySQL的root用户密码,格式:mysql> set password for 用户名@localhost = password(‘新密码’);
例如(上面例子将用户root的密码更改为root):mysql> set password for root@localhost = password(‘root’);
4.退出mysql重新登录,输入新密码root登录就可以了;
第二种 用mysqladmin修改密码
1.打开cmd进入MySQL的bin目录;(如我的路径是F:\MySQL\mysql-5.7.24-winx64\bin)
2.修改MySQL的root用户密码格式:mysqladmin -u用户名 -p旧密码; password 新密码
例如(第一种方法中我将密码改成了root,这里再改回123):
mysqladmin -uroot -proot password 123(这里一定要注意-uroot和 -proot是整体,不要写成-u root -p root,我亲自验证过他们直接加-u和root间可以加空格,但是会有警告出现,所以就不要加空格了)
重新登录,输入新密码123就ok了;
第三种用UPDATE直接编辑user表
首先声明,这种方法我测试了半个小时也没有成功,但是网上查询很多人都成功了,感兴趣的话可以尝试一下。下面是步骤
首先还是通过cmd 登录MySQL
连接权限数据库: use mysql;
改密码:update user set password=password(“123”) where user=“root”;(别忘了最后加分号) 。
以上不行可试:
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
刷新权限(必须步骤):flush privileges;
忘记root密码情况
1.关闭正在运行的MySQL服务。打开cmd进入MySQL的bin目录;
2.输入mysqld –skip-grant-tables 回车。(–skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。)
3.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),输入mysql回车,如果成功,将出现MySQL提示符 >。
连接权限数据库: use mysql; 。
4.改密码:update user set password=password(“root”) where user=“root”;(别忘了最后加分号) 。
刷新权限(必须步骤):flush privileges; 。
退出 quit;
重启mysql服务,使用用户名root和刚才设置的新密码root登录就ok了;
以上2步,可以修改my.ini
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
”,在“查找内容”处输入[mysqld],并点击“查找下一个”,它会自动转到[mysqld]字段行。在下面增加一行skip-grant-tables并保存,如下图: