每次使用Linux登陆mysql数据库的时候总是会有不一样的错误,上次登陆还好好的这次就报错了,如图所示:
出现这种错误,可能有两种情况:一是你的登陆密码忘记了,二是你的数据库中没有root用户。下面是解决方法:
1.先设置成无密码登陆
首先进入到mysql数据库的相关配置文件目录中:
cd /etc/mysql/mysql.conf.d
找到mysqld.cnf文件,然后以管理员的身份编辑:
sudo vim mysqld.cnf
找到 [mysqld]:
按 i 进入到编辑模式,在[mysqld]下面输入以下代码:
skip-grant-tables
如图所示:
然后按ESC退出编辑模式,按 :wq 保存文件后退出。
重启服务器:
service mysql restart
之后就可以直接登陆mysql了,有两种方式都可以:
sudo mysql
或者:
mysql -u root -p
让你输入密码的时候不用输入,直接按回车就可以进入mysql;
2.如果你是忘记了Mysql数据库的密码,只需要重新设置一下密码就可以,注意不同版本的数据库选择不同的修改密码语句,以将密码修改为1234567为例:
如果你是mysql 5.x:
update mysql.user set authentication_string=password(‘1234567’) where user=‘root’;
如果你是mysql 8.x:
alter user 'root'@'localhost' identified with mysql_native_password by '1234567';
如果出现下面的错误:
刷新一下权限即可解决:
flush privileges;
记得将上面 mysqld.cnf 配置文件中的 ‘skip-grant-tables’语句删除。
然后关闭mysql服务器在重新开启,即可使用密码登陆mysql;
sudo service mysql stop
sudo service mysql start
mysql -u root -p
3.如果你的user表中没有root用户,需要重新创建root用户。
使用无密码模式登陆mysql之后,查看一下自己的user表中有没有root:
use mysql;
select user from user;
如果没有,就自己创建:
create user 'root'@'localhost' identified by '1234567';
现在只是创建好了root用户,但是它并没有权限去操作数据库和表,需要赋予它操作权限(这里赋予它所有数据库的所有表的所有权限,反正就是一个很厉害的权限):
grant all on *.* to 'root'@'localhost' ;
刷新一下权限:
flush privileges;
和上面一样,记得将上面 mysqld.cnf 配置文件中的 ‘skip-grant-tables’语句删除。然后关闭mysql服务器在重新开启,即可使用密码登陆mysql;
sudo service mysql stop
sudo service mysql start
mysql -u root -p
大功告成!