理论上也适用于debian
mysql不知道从哪个某个版本开始,apt-get install过程中就没有让设置root密码的步骤了。以前安装好就可以很方便的使用,现在还要先敲一堆指令去手动设置,这真的是优化吗┑( ̄Д  ̄)┍

然而,然而,这时候即使不知道数据库root的密码,以系统root权限运行mysql -uroot是可以无视密码登录的
除此以外,由于密码不知道,没办法用别的方式登录上。对于习惯在服务器上扔一个adminer用来看数据库的我,着实不爽

但是一般大部分的日常应用都不会用root跑吧……
某种意义上,不折腾这个root密码,直接在命令行下建需要的用户,貌似也可以?

使用mysql_secure_installation

安装好以后直接root权限运行这个命令即可,可以设置密码、以及其他的设置
但是,我在这里设置完以后还是登不上root……

利用debian-sys-maint

安装好mysql以后,会生成一个后门系统维护用户,密码保存在这里:/etc/mysql/debian.cnf
只要运行下cat /etc/mysql/debian.cnf,把密码复制出来,这个用户是可以正常登录的!
于是我们继续打开万能的谷歌和度娘,查到了这条东西
UPDATE mysql.user SET authentication_string=PASSWORD('我是密码') WHERE user='root';
(如果是5.6以下,需要把authentication_string改为password

运行以后……密码修改成功,但是还登不上root?
不管了,咱直接去adminer里改密码
然而,改完以后还是登不上……

终极问题

继续用adminer看user表,发现了一个问题:
root用户的plugin是auth_socket,并非debian-sys-maint的mysql_native_password
也正是这个auth_socket赋予了系统root无视密码登录的能力
而解决方法就是把它改成mysql_native_password,我直接adminer里改了

1
2
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root';
FLUSH PRIVILEGES;

之后,终于可以在adminer登录root了
同时之前的无视密码登录也不能再使用