1. 场景:
新的ubuntu18.04,没有设置密码的环节.
①. ssh连接时,提示ERROR 1698(28000): Access denied for user 'root'@'localhost'.
②. 因为需要设置密码才能密码,默认是空密码.
2. 分析:
use mysql;
select * from mysql.user where user = 'root'\G
...
max_user_connections: 0
plugin: auth_socket
authentication_string: // 这里是为空,表示没有设置密码
password_expired: N
password_last_changed: 2020-08-12 16:57:45
password_lifetime: NULL
...
注:
①. 修改密码后的样子:
plugin: mysql_native_password // 改变了
authentication_string: *3C8252DE09D5ACD3977B5D239E7A5EA063409AC3
3. mysql8以下:
// ①. 找到安装时默认生成的默认账户
cat /etc/mysql/debian.cnf
mysql -u debian-sys-maint -p // 密码是上一条命令中的password = xxx,是随机生成的,不要尝试修改这个密码.
// ②. 修改密码
use mysql;
update mysql.user set authentication_string=password('root') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
// ③. 重启mysql
sudo service mysql restart
mysql -u root -p
4. mysql8以上:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] 这一块中加入skip-grant-tables这句话。
sudo service mysql restart 重启mysql 服务
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
flush privileges;
quit
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf将刚才的插入的内容删去
/etc/init.d/mysql restart