先说下背景,最近阿里云618活动云服务器比较便宜,就买了一个来玩,在安装mysql之后,首次创建用户没有创建密码,导致后面没法创建密码,并且谁都可以无密码登陆数据库,然后我各种尝试的时候又误删了root用户,导致后面一直登陆不上,也上网查过资料,基本都是说去/etc/my.cnf文件中添加一行skip-grant-tables代码来使用无用户名无密码模式登陆,但是在我本地的这个文件跟网上描述的完全不同,因为我这个文件中是空的,不像他们说的有许多内容。当然我也照着这个方法去尝试过,不成功。这可能跟我本地环境有关吧,我本地环境都是最新版本的,系统:Ubuntu20.04 64位,mysql:8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)),我安装的也是用apt-get install mysql-server命令安装的。
现在说解决办法。打开文件/etc/mysql/debian.cnf,在这个文件中有登陆mysql的用户名和方法(即mysql_upgrade下的用户名和密码),这个应该是系统提供的,反正就用他们登陆就对了。
登陆进去之后发现root果然是被删掉了的。
先刷新权限:flush privileges;再drop user root;再刷新权限flush privileges;我多次刷新权限和drop root用户是为了保险起见,可以尝试不再删除root用户,但是刷新权限命令不可省。接下来就可以创建用户了,注意,mysql8.0和之前版本在创建用户时不一样(之前版本创建用户和授权在一个sql里):先创建用户名和密码:create user 'name'@'localhost' identified by 'password';(请自行将用户名和密码替换进去),再授权:grant all privileges on *.* to 'name'@'localhost';(请自行将用户名替换进去)。再查看发现root用户已经添加进去了。
出来验证必须密码登陆,大功告成!