目标

增加一个可以远程登录的账号,并设置一下密码和权限。

步骤

在不记得初始密码的时候,可以使用步骤一来启用一个跳过权限表认证的 mysqld 服务。

启用一个跳过权限表认证的 mysqld 服务

需要以管理员的身份运行命令行,先将系统中的 mysql 服务关闭: net stop mysql。但我使用的是 phpstudy 开启的 mysql 8.0 服务,这个指令返回了找不到服务,需要从面板里关闭。

关闭现有的 mysqld 服务之后执行以下命令启动 mysqld 服务:

# 每一个参数都有作用,都是必要的
mysqld --console --skip-grant-tables --shared-memory

执行之后,如果窗口挂起,则说明服务启动成功。后续 Ctrl + C 就可以关闭服务。

进入 mysql shell 修改用户密码

另外打开一个命令行窗口,直接输入 mysql 进入 mysql 的 shell 中。我这边没有将 mysql 8.0 bin 目录添加到 path 中,所以切到 bin 目录,然后再执行 ./mysql

use mysql; 选择 mysql 权限表数据库。

select host, user, authentication_string, plugin from user; 查询现有的用户表,authentication_string 就是 mysql 8.0 下的 password,plugin 目前观察到正常的值应该为 mysql_native_password,另外一个默认的 caching_sha2_password 据说不能正常登录,会提示 1251- Client does not support authentication protocol

也可以通过 alter user 'root'@'localhost' identified with mysql_native_password by '123456'; 这样的形式来修改密码。这种不指定密码字段的方法似乎更通用。

当然可以用 create user test... 来创建新的用户以登录。

最后,就是 flush privileges; 更新权限,然后就可以退出去重新登录试试了。注意:需要关闭之前挂起的 mysqld 服务窗口,然后正常启动 mysqld 服务,再登录 mysql -uroot -p 即可。

中间可以会出现其他情况,比如说命令执行报错,提示:

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: N
O)
ERROR:
Can't connect to the server

可以把之前的挂起的 mysqld 服务关闭再重启即可。

// 修改权限 略

参考:MySQL 8.0 修改密码 步骤详解(详细图解)