问题
最近安装了MariaDB,MariaDB其实就是mysql的一个开源版本,语法和mysql是一致的,今天安装了MariaDB发现一输入mysql就能进入,是因为默认root账号没有密码,想修改密码,发现输入下面的命令都没效果:
mysqladmin -u用户名 -p旧密码 password 新密码
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
mysql> set password for root@localhost = password('123');
但是发现多次尝试都没有成功修改过,一输入mysql还是没有密码的状态
解决办法
经过长时间的搜索,总算是找到了解决办法
我们的user信息都存储在mysql数据库的表里,密码被加密
1.定位
对比正常的mysql
mysql> use mysql;
mysql> select user, plugin from mysql.user where plugin = 'mysql_native_password';
+-----------+-----------------------+
| user | plugin |
+-----------+-----------------------+
| root | mysql_native_password |
+-----------+-----------------------+
我们的mysql
MariaDB [(none)]> select user, plugin from mysql.user;
+------+-------------+
| user | plugin |
+------+-------------+
| root | unix_socket |
+------+-------------+
2.更改
不太特别了解这个unix_socket 是干什么用,但是把他改了会成功
MariaDB [(none)]> use mysql
MariaDB [(none)]> UPDATE mysql.user SET authentication_string = PASSWORD('mypassword'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
3.验证
MariaDB [(none)]> select user, plugin from mysql.user
发现plugin这一项被改成了mysql_native_password;
然后退出MySQL,执行以下命令重启MySQL:
service mysql restart
再一次进入mysql会提示需要输入密码了
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)