如何解决MariaDB无密码就可以登录的问题(debian)
困扰了很久的问题,使用apt-get来安装mysql,安装好之后发现安装的是 MariaDB,如下,无需密码既可以登录了.即使使用mysqladmin设置好密码,用密码登录可以,不用密码登录也可以.
排查思路:
一、看看my.conf有没有skip-grant-tables,跳过密码验证. 去跟安装正常的mysql来比较下,如下:
正常mysql:
1 | mysql> select user, plugin from mysql.user where plugin = 'mysql_native_password'; |
不正常的:
1 | MariaDB [(none)]> select user, plugin from mysql.user; |
看到这里应该发现问题了,按照正常的修改就行了.
如下:
1 | systemctl stop mysqld |
进去mysql执行如下命令:
1 | MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mypassword'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost'; |
验证:
1 | MariaDB [(none)]> select user, plugin from mysql.user; |
ps -ef 查询mysql的pid并杀死:
1 | kill -9 pid |
启动:
1 | systemctl start mysqld |
最后验证下:需要密码了.
1 | root@debian:~# mysql |
二、网上还有说可以用另外一种办法:
MariaDB root 账户默认使用了 UNIX_SOCKET 插件,只允许 root 用户连接,无需密码. 可以使用 root 用户连接后创建新用户或者执行:
1 | update mysql.user set plugin = ''where User='root'; |
如果需要密码后,却无法进入,可按网上方法进行修改,如下:
方法1:
用SET PASSWORD命令:
1 | mysql -u root |
方法2:
用mysqladmin:
1 | mysqladmin -u root password "newpass" |
如果root已经设置过密码,采用如下方法:
1 | mysqladmin -u root password oldpass "newpass" |
方法3:
用UPDATE直接编辑user表:
1 | mysql -u root |
在丢失root密码的时候,可以这样:
1 | mysqld_safe --skip-grant-tables& |