ubuntu系统mysql免密登录和拒绝登录踩坑(Access denied for user ‘root‘@‘localhost‘)

一、免密登录

忘记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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值