目录
一、免密登录
忘记mysql密码时使用免密登录重置密码。
1、编辑mysqld.cnf文件
mysqld.cnf 文件在目录‘/etc/mysql/mysql.conf.d/’中,
cd /etc/mysql/mysql.conf.d/
sudo vi mysqld.cnf
输入i进入vi编辑模式。
在文件中找到 [mysqld] 下面的 skip-external-locking 一行,在此行下面增加一行 skip-grant-tables
例如:
[mysqld]
...
...
skip-external-locking
skip-grant-tables
增加完成后按esc退出,再按‘:'进入末行编辑,输入wq,(wq保存并退出)。
2、重启mysql服务:
sudo service mysql restart
3、修改密码:
再ubuntu终端输入mysql进入MySQL,输入USE mysql切换至mysql数据库
mysql
USE mysql
先把密码设为空:
UPDATE mysql.user SET authentication_string=password('') WHERE User='root' AND Host ='localhost';
4、刷新权限并退出
flush privileges;
quit
5、重新修改mysqld.cnf文件去掉免密登录
cd /etc/mysql/mysql.conf.d/
sudo vi mysqld.cnf
此时进入vi,因为有可能前面打开过可能会让你选择打开模式是只读还是修改等,输入E即可:
Swap file ".mysqld.cnf.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:E
把开始免密登录行注释掉:
[mysqld]
...
...
skip-external-locking
# skip-grant-tables
6、重新进入mysql修改密码
笔者修改时比较小心,分了六部,其实第六步直接在第三步中完成应该也可以,请自行测试。
mysql -uroot -p
Enter password:
update user set authentication_string=password('123456') where user='root';
flush privileges;
quit;
二、拒绝登录踩坑
当时在ubuntu上登录遇到了下面的情况
~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
使用sudo mysql -u root -p 则正常,这本身倒是没什么,但是问题是:使用python的pymysql模块connect链接服务器时仍然时拒绝登录呀,程序开发注意还是让程序自动连接和处理一些数据的,所以这个问题还得解决。
1、拒绝的原因
那么先使用sudo mysql -u root -p登录进去,查看一下user表。
mysql> select user, plugin from mysql.user;
+-----------+-----------------------+
| user | plugin |
+-----------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| dev | mysql_native_password |
+-----------+-----------------------+
3 rows in set (0.01 sec)
错误的原因就是在 root的plugin为auth_socket,用密码登陆的plugin应该是mysql_native_password。
2、修改 root的plugin
update mysql.user set authentication_string=PASSWORD('newPwd'), plugin='mysql_native_password' where user='root';
这里时同时修改了一个新密码和root的plugin,如果不设置新密码可以省去,例如:
UPDATE mysql.user SET plugin="mysql_native_password";
3、刷新和重启
flush privileges;
quit;
sudo service mysql restart