答案1
问题原因
MySQL 5.7 中以用户身份登录的默认配置root
需要使用身份验证套接字。这可以通过查询user
表来验证:
mysql> select user,authentication_string,plugin from user where user='root';
+------+-----------------------+-------------+
| user | authentication_string | plugin |
+------+-----------------------+-------------+
| root | | auth_socket |
+------+-----------------------+-------------+
1 row in set (0.00 sec)
来自文档:
套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序向服务器指定的 MySQL 用户名匹配。如果名称不匹配,插件将检查套接字用户名是否与 mysql.user 系统表行的 authentication_string 列中指定的名称匹配。如果找到匹配项,则插件允许连接。
换句话说,mysql 默认没有设置 root 密码 - 您需要以 root 身份或通过运行 phpMyAdmin sudo
(出于安全原因,这两种方式都不是好主意),或者您可以更改身份验证方法并重置 root 密码,如下所示Digital Ocean 教程。
请注意,除了名称相同之外,MySQL 用户和系统用户并不相同。您可以拥有一个 MySQL 用户jdoe
,但主机系统上没有这样的用户。因此,root
是 MySQL 的 root 用户,而不是系统用户。
更改插件和密码的步骤:
打开终端并运行
sudo mysql -u root
。您应该会看到一条问候消息和mysql>
提示。这是 MySQL shell,它与您的命令行 shell 不同,因此这里只接受 SQL 语句。输入以下 SQL 查询序列:
mysql> use mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> UPDATE user SET plugin='mysql_native_password',authentication_string=PASSWORD('newpassword') WHERE user = 'root'; Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1
退出并尝试登录:
mysql> exit Bye $ sudo systemctl restart mysql $ sudo mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.21-1 (Debian) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
如果一切顺利,您应该能够通过新密码从 phpMyAdmin 登录。如果出现问题,请尝试在不检查权限的情况下重新启动服务器(这是 Digital Ocean 教程中的第 3 步)。对于其他问题,请随时在此处或数据库管理员 - Stack Exchange