由于笔者只测试过Ubuntu 16.04.4、Ubuntu 19.04和Debian 9,此方法不确定在其他版本下适用。
本文章介绍的方法同样适用于这样的错误信息。
➜ ~ 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密码
如果需要修改先使用debian-sys-maint
登录数据库,完成一下操作
select user, plugin from mysql.user;
查看默认的连接方式。- 如果是
auth_socket
(MySQL)的连接方式,则继续下面得步骤,如果是unix_socket
(MariaDB),则转到MariaDB的处理方法。 update mysql.user set authentication_string=password('root'), plugin = 'mysql_native_password' where user = 'root';
使用这一行明令将root密码修改为root。flush privileges;
应用权限。- 退出并重启MySQL。
MariaDB的处理方法
上面的方法仅针对MySQL测试。
MariaDB的root默认连接方式是unix_socket
(MariaDB) 在Debian中软件包mysql已经替换成了mariadb了。在安装后/etc/mysql/debian.cnf
预设了root用户使用socket的连接方式,所以不输入密码也可在命令行直接使用mysql命令登录。 要想使用密码连接需要修改连接方式 - 输入mysql进入客户端,若无法进入则跳过。
- 输入
select user, plugin from mysql.user
查看默认的连接方式。 - 如果是
unix_socket
(MariaDB),则继续下面得步骤。 - 退出mysql,并kill掉进程。
- 打开
mysqld_safe --skip-grant-tables
放入后台,并进入mysql
。 update mysql.user set authentication_string = password('root'), plugin = 'mysql_native_password' where user = 'root';
。flush privileges;
应用权限。- 退出并重启MySQL。
为MySQL添加远程访问
- 修改
/etc/mysql/mysql.conf.d/mysqld.cnf
中的bind-address
为允许的网络地址,若为整个网络则填入0.0.0.0
或注释掉 - 重启服务
- 启动mysql,输入
use mysql;
进入mysql表 - 修改地址
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
允许root用户远程使用root为密码连接。 - 使修改生效
flush privileges;
- 退出MySQL。