记一次 Ubuntu 16.04 下修改 Mysql root 用户密码的过程, 期间遇到过很多问题, 这里只记录主要问题的解决
- 登录 mysql 时, 显示
ERROR 1045 (28000)
, 网上大部分教程都是在配置文件my.cnf
中的[mysqld]
下添加skip-grant-tables
跳过密码验证, 但是我发现我的配置文件下没有该配置项 (原因未明), 于是直接采用命令/usr/bin/mysqld_safe --skip-grant-tables
跳过验证 - 尝试直接登录时发生错误,
mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists
, 查询到的解决方法:mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
- 直接登录成功, 开始修改密码 (过程中发现我没有升级数据库导致无法更改数据表, 只能退出使用
mysqld_upgrade
升级数据库)- 刷新权限
flush privileges
(开始修改密码时不允许修改, 刷新权限才能修改) - 修改
root
用户密码-
mysql1.pngmysql> use mysql
-
mysql2.pngselect user,host,authentication_string from user;
mysql 8.0+ 版本password
字段更改了, 采用原来的password = password("XXX")
语句会报语法错误
-
修改密码
mysql3.pngALTER user '$User'@'$Host' identified by '$Password
,$User
、$Host
、$Password
分别是要设的用户名、主机名、密码 (需要有数字、大小写字母和特殊符号构成), 注意$Host
不一定是localhost
, 这个根据上面的查询结果决定, 否则会ALTER
失败, 所以这里的命令是ALTER user 'root'@'%' identified by 'XXX'
. 一定不要直接update user set authentication_string="newpassword" where user="root"
, 因为authentication_string
字段下只能是mysql
加密后的 41 位字符串密码, 直接给赋值newpassword
会发生错误
-
- 刷新权限
- 杀死
mysqld_safe
进程, 尝试重新登录.
网友评论