配置环境
系统环境:
MySQL版本:
问题描述
今天学习flask框架中连接数据库的操作, 要用到MySQL. 之前看过一点数据的操作, 所以MySQL已经装在电脑上了, 但是密码忘记了(也许我当时就没设置密码:)). 总之, 现在我需要知道MySQL根目录登录密码.
解决过程
遇到这样的问题, 首先是搜索引擎来一波, 先是查找如何修改密码, 但是找到的解决方法里面都有一条这样的过程:
- 修改MySQL的配置信息;
- 免密安全登录;
- 修改密码;
但是到我具体实践的时候问题就比较多了, 可能是我搜索到的解决方法都是几年之前的, 所以配置文件的位置不太一样, 因此没有办法免密登录, 就算我用sudo权限登录, 修改密码了, 仍然没有办法正常用密码登录;
关于用sudo权限登录:
我可以用sudo mysql -u root
进入到MySQL的交互命令行, 目前不知道为什么, 希望评论可以帮我解决;
最后我直接将错误信息, 粘到搜索引擎中, 找到了一个博客(MySQL提示ERROR 1698 (28000): Access denied for user ‘root’@'localhost’错误解决办法), 系统环境的配置和我基本一致, 用这样方法可以解决. 解决过程如下:
- 修改MySQL的配置文件, 使得可以免密安全登录
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在下面的位置添加skip-grant-tables
, 保存并退出.
- 免密登录
# 重启MySQL服务
$ sudo service mysql restart
# 进入MySQL命令交互
$ mysql -u root -p # 这条命令回车之后, 会提示输入密码, 不用输入密码,直接回车即可
- 查看密码验证信息;
mysql> use mysql;
mysql> select user, plugin from mysql.user;
可以看到如下信息:
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.session | mysql_native_password |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
这说明root
用户不是使用本地密码.
- 修改登录密码和
plugin
;
mysql> use mysql;
# 123456就是新设置的密码, 修改成自己的密码就可以了
mysql> update user set authentication_string=password("123456"), plugin=mysql_native_password where user="root";
关于
authentication_string
字段:
我查的几个几年前的博客里面使用的password
字段, 但是在这个版本里面已经更新为authentication_string
字段了;
关于MySQL的登录密码:
有一篇博客(mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements)提到说密码必须包含大小写字母, 特殊字符, 数字, 长度至少为8个字符, 但是我设置成 ‘123456’ 一点问题都没有, 这个还有待考证;
- 刷新
mysql> flush privileges;
- 删除/注释第一步在配置文件中添加的
skip-grant-tables
, 并重启mysql
服务;
如果还有其他问题, 参见MySQL提示ERROR 1698 (28000): Access denied for user ‘root’@'localhost’错误解决办法