windows 下 mysql 8.0 修改用户密码
目标
增加一个可以远程登录的账号,并设置一下密码和权限。
步骤
在不记得初始密码的时候,可以使用步骤一来启用一个跳过权限表认证的 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 服务关闭再重启即可。
// 修改权限 略