某些系统,例如Ubuntu,mysql,默认情况下使用UNIX
auth_socket插件。
基本上意味着: 使用它的db_users,将由 系统用户凭据 “认证” _ 。_
您可以
root通过执行以下操作查看您的用户是否设置为:
$ sudo mysql -u root # I had to use "sudo" since is new installationmysql> USE mysql;mysql> SELECt User, Host, plugin FROM mysql.user;+------------------+-----------------------+| User | plugin |+------------------+-----------------------+| root | auth_socket|| mysql.sys | mysql_native_password || debian-sys-maint | mysql_native_password |+------------------+-----------------------+
如您在查询中看到的,
root用户正在使用
auth_socket插件
有两种解决方法:
- 您可以设置root用户使用
mysql_native_password
插件 - 您可以
db_user
与自己创建一个新的system_user
(推荐)
选项1:
$ sudo mysql -u root # I had to use "sudo" since is new installationmysql> USE mysql;mysql> UPDATE user SET plugin='mysql_native_password' WHERe User='root';mysql> FLUSH PRIVILEGES;mysql> exit;$ service mysql restart
选项2 :( 用您拥有的用户名替换YOUR_SYSTEM_USER)
$ sudo mysql -u root # I had to use "sudo" since is new installationmysql> USE mysql;mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';mysql> UPDATE user SET plugin='auth_socket' WHERe User='YOUR_SYSTEM_USER';mysql> FLUSH PRIVILEGES;mysql> exit;$ service mysql restart
请记住,如果使用选项#2,则必须以系统用户名(
mysql -u YOUR_SYSTEM_USER)连接到mysql。
注意: 在某些系统上(例如Debian Stretch),“ auth_socket”插件称为“
unix_socket”,因此相应的SQL命令应为:
UPDATE user SET plugin='unix_socket' WHEReUser='YOUR_SYSTEM_USER';
更新: 从@andy的评论看来,mysql
8.xx已更新/替换了,
auth_socket因为
caching_sha2_password我没有使用mysql
8.xx进行系统安装来测试此问题,但是上述步骤应该可以帮助您了解问题。这是答复:
自MySQL 8.0.4起,一项更改是新的默认身份验证插件为’caching_sha2_password’。 新的“
YOUR_SYSTEM_USER”将具有此auth插件,您现在可以使用“ mysql -u YOUR_SYSTEM_USER -p”从bash
shell登录,并在提示符下提供该用户的密码。不需要“更新用户SET插件”步骤。有关8.0.4默认身份验证插件更新,请参见https://mysqlserverteam.com/mysql-8-0-4-new-
default-authentication-plugin-
caching_sha2_password/



