MySQL 5.7 忘记root密码,使用--skip-grant-tables重置root密码的通用方法
这里主要介绍在不知MySQL的root密码的情况下,使用--skip-grant-tables关闭MySQL服务器的认证,从而可以重置root的密码。MySQL版本为5.7。
1、关闭MySQL
<pre data-language-edit="Bash" spellcheck="false">```bash
sudo service mysqld stop
2、使用[--skip-grant-tables ](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-grant-tables)和 [--skip-networking](https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-networking) 重启MySQL
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<pre data-language-edit="Bash" spellcheck="false">```bash sudo mysqld --skip-grant-tables --skip-networking &
--skip-grant-tables:此选项会让MySQL服务器跳过验证步骤,允许所有用户以匿名的方式,无需做密码验证直接登陆MySQL服务器,并且拥有所有的操作权限。
--skip-networking:此选项会关门MySQL服务器的远程连接。这是因为以--skip-grant-tables方式启动MySQL服务器会有很大的安全隐患,为了降低风险,需要禁止远程客户端的连接。
3、本地连接mysql
<pre data-language-edit="Bash" spellcheck="false">```bash
shell> mysql
\--skip-grant-tables已经关闭MySQL服务器的认证,以匿名方式,无需密码即可连接。
4、重置密码
------
在重置密码前,先要重载授权表:
<pre data-language-edit="Bash" spellcheck="false">```bash mysql> FLUSH PRIVILEGES;
MySQL 5.7.6+:
<pre data-language-edit="Bash" spellcheck="false">```bash
mysql> ALTER USER <span class="hljs">'root'</span>@<span class="hljs">'localhost'</span> IDENTIFIED BY <span class="hljs">'MyNewPass'</span>;
MySQL 5.7.6以及之后的版本,使用ALTER USER语法来修改密码。
MySQL 5.7.5以及之前的版本
<pre data-language-edit="Bash" spellcheck="false">```bash mysql> SET PASSWORD FOR <span class="hljs">'root'</span>@<span class="hljs">'localhost'</span> = PASSWORD(<span class="hljs">'MyNewPass'</span>);
MySQL 5.7.5以及之前的版本使用SET PASSWORD语法修改密码。
如果上面的方法修改密码有错,可以直接修改mysql.user表:
<pre data-language-edit="SQL" spellcheck="false">```sql
<span class="hljs">UPDATE</span> mysql.user <span class="hljs">SET</span> authentication_string <span class="hljs">=</span> PASSWORD(<span class="hljs">'MyNewPass'</span>)
<span class="hljs">WHERE</span> <span class="hljs">User</span> <span class="hljs">=</span> <span class="hljs">'root'</span> <span class="hljs">AND</span> Host <span class="hljs">=</span> <span class="hljs">'localhost'</span>;
FLUSH PRIVILEGES;
注意:mysql5.7 user表里已经去掉了password字段,改为了authentication\_string。
5、重启服务器
-------
<pre data-language-edit="Bash" spellcheck="false">```bash service mysqld restart
因为之前使用--skip-grant-tables启动,所以需要重启mysql服务器,去掉--skip-grant-tables。