由于笔者只测试过Ubuntu 16.04.4、Ubuntu 19.04和Debian 9,此方法不确定在其他版本下适用。

本文章介绍的方法同样适用于这样的错误信息。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
➜  ~ mysql -u root -p          
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

查看默认密码

使用包管理器安装MySQL后,查看这个文件可以看到安装后的默认密码/etc/mysql/debian.cnf,这个密码是属于debian-sys-maint的,而非root
即使在这里你可能可以使用root用户登录,因为root用户默认登录方式是使用socket连接,而不验证密码。推荐继续阅读修改为使用密码连接。

修改root密码

如果需要修改先使用debian-sys-maint登录数据库,完成一下操作

  1. select user, plugin from mysql.user;查看默认的连接方式。
  2. 如果是auth_socket(MySQL)的连接方式,则继续下面得步骤,如果是unix_socket(MariaDB),则转到MariaDB的处理方法
  3. update mysql.user set authentication_string=password('root'), plugin = 'mysql_native_password' where user = 'root';使用这一行明令将root密码修改为root。
  4. flush privileges;应用权限。
  5. 退出并重启MySQL。

MariaDB的处理方法

上面的方法仅针对MySQL测试。
MariaDB的root默认连接方式是unix_socket(MariaDB)
在Debian中软件包mysql已经替换成了mariadb了。在安装后/etc/mysql/debian.cnf预设了root用户使用socket的连接方式,所以不输入密码也可在命令行直接使用mysql命令登录。
要想使用密码连接需要修改连接方式

  1. 输入mysql进入客户端,若无法进入则跳过。
  2. 输入select user, plugin from mysql.user查看默认的连接方式。
  3. 如果是unix_socket(MariaDB),则继续下面得步骤。
  4. 退出mysql,并kill掉进程。
  5. 打开mysqld_safe --skip-grant-tables放入后台,并进入mysql
  6. update mysql.user set authentication_string = password('root'), plugin = 'mysql_native_password' where user = 'root';
  7. flush privileges;应用权限。
  8. 退出并重启MySQL。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄