6.2.17 对连接到 MySQL 的问题进行故障排除

如果在尝试连接到 MySQL 服务器时遇到问题,则以下各项描述了一些可用于纠正问题的操作。

shell> mysql
ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
shell> mysql
ERROR 2002: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (111)
shell> netstat -ln | grep mysql

要确定是否需要初始化授权 table,请在数据目录下查找mysql目录。 (数据目录通常名为datavar,位于 MySQL 安装目录下.)确保mysql数据库目录中有一个名为user.MYD的文件。如果不是,则为初始化数据目录。这样做并启动服务器后,您应该能够连接到服务器。

shell> mysql -u root 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

这意味着在安装过程中已经分配了 root 密码,并且必须提供该密码。有关分配密码的不同方式以及在某些情况下如何查找密码的信息,请参见第 2.10.4 节“保护初始 MySQL 帐户”。如果您需要重置 root 密码,请参阅B.4.3.2 节,“如何重设根密码”中的说明。找到或重置密码后,使用--password(或-p)选项再次以root身份登录:

shell> mysql -u root -p
Enter password:

但是,如果您已使用mysqld --initialize-insecure初始化 MySQL,则服务器将允许您以root的身份进行连接而无需使用密码(有关详细信息,请参见第 2.10.1 节“初始化数据目录”)。这是安全隐患,因此您应该为root帐户设置密码。有关说明,请参见第 2.10.4 节“保护初始 MySQL 帐户”

shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

有关如何处理此问题的信息,请参见第 6.4.1.3 节“迁移到 4.1 版之前的密码哈希和 mysql_old_password 插件”

您可以通过使用--no-defaults选项调用 Client 端程序来禁止使用选项文件。例如:

shell> mysqladmin --no-defaults -u root version

第 4.2.2.2 节“使用选项文件”中列出了 Client 端使用的选项文件。环境变量在第 4.9 节“环境变量”中列出。

shell> mysqladmin -u root -pxxxx ver
Access denied for user 'root'@'localhost' (using password: YES)

如果即使您没有指定密码也发生上述错误,则意味着您在某些选项文件中列出了错误的密码。请尝试上一项目中所述的--no-defaults选项。

有关更改密码的信息,请参见第 6.2.10 节“分配帐户密码”

如果您丢失或忘记了root密码,请参阅B.4.3.2 节,“如何重设根密码”

您可以使用--host=127.0.0.1选项来明确命名服务器主机。这将构建与本地mysqld服务器的 TCP/IP 连接。您还可以通过指定--host选项来使用 TCP/IP,该选项使用 localhost 的实际主机名。在这种情况下,即使您在与服务器相同的主机上运行 Client 端程序,也必须在服务器主机的usertable 行中指定主机名。

SELECT * FROM user;

结果中应包含一行,其中HostUser列与 Client 端的主机名和 MySQL 用户名匹配。

Host ... is not allowed to connect to this MySQL server

您可以通过为尝试连接时使用的 Client 端主机名和用户名的组合设置一个帐户来解决此问题。

如果您不知道要连接的计算机的 IP 地址或主机名,则应在usertable 中放入带有'%'作为Host列值的行。尝试从 Client 端计算机连接后,使用SELECT USER()查询查看您实际如何连接。然后,将usertable 行中的'%'更改为日志中显示的实际主机名。否则,您的系统将处于不安全状态,因为它允许来自任何主机的给定用户名的连接。

在 Linux 上,可能发生此错误的另一个原因是,您使用的是 MySQL 二进制版本,该版本是使用与所使用版本不同的glibc库版本编译的。在这种情况下,您应该升级 os 或glibc,或者下载 MySQL 版本的源分发版并自己进行编译。源 RPM 通常很难编译和安装,因此这不是一个大问题。

shell> mysqladmin -u root -pxxxx -h some_hostname ver
Access denied for user 'root'@'' (using password: YES)

如果您尝试以root的身份连接并出现以下错误,则意味着usertable 中没有User列值为'root'的行,并且mysqld无法解析 Client 端的主机名:

Access denied for user ''@'unknown'

这些错误 table 明 DNS 问题。要解决此问题,请执行mysqladmin flush-hosts以重置内部 DNS 主机缓存。参见第 5.1.11.2 节“ DNS 查找和主机缓存”

一些永久性的解决方案是:

首页