最近本地环境装了个 MariaDB - 10.1.37, 发现了这个坑
安装:
基于 能不折腾就不折腾的原则,直接使用 apt 安装
sudo apt install mariadb-server
安装完之后,初始化一下
sudo mysql_secure_installation
尝试登录
mysql -uroot -hlocalhost -p123456
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
what the f**k?
凭借多年的debug经验,熟悉的打开 google,然后输入 ERROR 1698 (28000): Access denied for user 'root'@'localhost'
点击搜索。
然后,根据搜索结果,排查,尝试
首先出现最多的结果是:
update user set password=PASSWORD("123456") where user='root'; // 就是修改下密码
这里怀疑了下自己,是不是设置密码的时候弄错了,
这里还是写下步奏
修改 my.cnf 在 [mysqld] 下面增加 skip-grant-tables // 登录的时候忽略mysql 密码
注意 Mariadb 是/etc/mysql/mariadb.conf.d/50-server.cnf
- sudo service restart mysql // 重启一下mysql
- mysql -uroot // 这样就可以root登录了
- update mysql.user set password=PASSWORD("123456") where mysql.user='root'; // 修改下root密码
- 将第一步的 skip-grant-tables 去掉
- sudo service restart mysql // 重启一下mysql
尝试了一把后发现,没有卵用(意料之中,多年码农的经验告诉我密码没有错!)。。。
继续谷歌
看到了 这个 blog https://blog.csdn.net/dream361/article/details/65445168
不得不说 csdn 还是有好文章的
划重点
与之前版本mysql不同,需要获得操作系统管理员
权限,才能登录MariaDB
的root
用户,普通操作系统用户
不能登录MariaDB数据库root
用户
dream361
解决方案
sudo mysql -uroot -hlocalhost -p123456
没错,就是加个sudo,用 root 权限去登录就可以了。。。
ps:
直接密码写到命令行是不安全的,例如:
sudo mysql -uroot -hlocalhost -p123456
黑客攻克了你的电脑,然后看历史就能够知道mysql 的用户名跟密码了,不过本地环境就随意了。。
安全点的做法是:
sudo mysql -uroot -hlocalhost -p
直接用root 也是不安全的,可以创建个新用户,然后给一定的权限
更详细的操作:
https://www.jianshu.com/p/d7b9c468f20d