MySQL5.7无法连接到[本地] MySQL 服务器

官网地址:MySQL :: MySQL 5.7 Reference Manual :: B.3.2.2 Can't connect to [local] MySQL server

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

MySQL 5.7 参考手册 / ... / 无法连接到[本地] MySQL 服务器

B.3.2.2 无法连接到[本地] MySQL 服务器

Unix 上的 MySQL 客户端可以通过两种不同的方式连接到 mysqld服务器:使用 Unix 套接字文件通过文件系统中的文件进行连接(默认/tmp/mysql.sock),或者使用 TCP/IP 通过端口号进行连接。Unix 套接字文件连接比 TCP/IP 更快,但只能在连接到同一台计算机上的服务器时使用。如果未指定主机名或指定特殊主机名,则使用 Unix 套接字文件 localhost

如果 MySQL 服务器在 Windows 上运行,则可以使用 TCP/IP 进行连接。如果服务器在启用 named_pipe系统变量的情况下启动,并且在运行服务器的主机上运行客户端,则还可以使用命名管道进行连接。命名管道的名称是MySQL默认的。如果连接到mysqld时没有给出主机名 ,MySQL 客户端首先尝试连接到命名管道。如果这不起作用,它将连接到 TCP/IP 端口。.您可以通过使用主机名 来强制在 Windows 上使用命名管道。

错误 (2002)Can't connect to ... 通常意味着系统上没有运行 MySQL 服务器,或者您在尝试连接到服务器时使用了不正确的 Unix 套接字文件名或 TCP/IP 端口号。您还应该检查您正在使用的 TCP/IP 端口是否未被防火墙或端口阻止服务阻止。

错误(2003) 表示网络连接被拒绝。您应该检查是否有一台 MySQL 服务器正在运行、是否已启用网络连接、以及您指定的网络端口是否是服务器上配置的端口。 Can't connect to MySQL server on 'server' (10061)

首先检查您的服务器主机上是否有名为 mysqld的进程正在运行。(在 Unix 上使用 ps xa | grep mysqld ,在 Windows 上使用任务管理器。)如果没有这样的进程,则应该启动服务器。请参见第 2.9.2 节"启动服务器"

如果mysqld进程正在运行,您可以通过尝试以下命令来检查它。您的设置中的端口号或 Unix 套接字文件名可能不同。 host_ip代表运行服务器的机器的IP地址。

language-terminal 复制代码
$> mysqladmin version
$> mysqladmin variables
$> mysqladmin -h `hostname` version variables
$> mysqladmin -h `hostname` --port=3306 version
$> mysqladmin -h host_ip version
$> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version

请注意在主机名 命令 中使用反引号而不是正引号;这些导致主机名 (即当前主机名) 的输出被替换到mysqladmin命令中。如果您没有 hostname 命令或在 Windows 上运行,则可以在选项后面手动键入计算机的主机名(不带反引号)-h。您还可以尝试-h 127.0.0.1使用 TCP/IP 连接到本地主机。

确保服务器尚未配置为忽略网络连接,或者(如果您尝试远程连接)未将服务器配置为仅在其网络接口上进行本地侦听。如果服务器在启用skip_networking 系统变量的情况下启动,则它根本不接受 TCP/IP 连接。如果服务器在 bind_address系统变量设置为 的情况下启动127.0.0.1,则它仅在环回接口上本地侦听 TCP/IP 连接,并且不接受远程连接。

检查并确保没有防火墙阻止对 MySQL 的访问。您的防火墙可能根据正在执行的应用程序或 MySQL 用于通信的端口号(默认为 3306)进行配置。在 Linux 或 Unix 下,检查您的 IP 表(或类似)配置以确保端口未被阻止。在 Windows 下,ZoneAlarm 或 Windows 防火墙等应用程序可能需要配置为不阻止 MySQL 端口。

以下是Can't connect to local MySQL server可能发生错误的一些原因:

  • mysqld未在本地主机上运行。检查操作系统的进程列表以确保mysqld进程存在。

  • 您正在 Windows 上运行 MySQL 服务器,并有许多 TCP/IP 连接。如果您的客户端经常遇到该错误,您可以在此处找到解决方法: [第 B.3.2.2.1 节"在 Windows 上连接到 MySQL 服务器失败"](#第 B.3.2.2.1 节“在 Windows 上连接到 MySQL 服务器失败”)。

  • 有人删除了mysqld使用的 Unix 套接字文件 (/tmp/mysql.sock默认情况下)。例如,您可能有一个从目录中删除旧文件的cron /tmp作业 。您始终可以运行mysqladmin version来检查mysqladmin尝试使用的 Unix 套接字文件是否确实存在。这种情况下的修复方法是将cron 作业更改 为不删除 mysql.sock或将套接字文件放置在其他位置。请参见 第 B.3.3.6 节"如何保护或更改 MySQL Unix 套接字文件"

  • 您已经使用该 选项启动了mysqld--socket=/path/to/socket服务器 ,但忘记告诉客户端程序套接字文件的新名称。如果更改服务器的套接字路径名,还必须通知 MySQL 客户端。--socket您可以通过在运行客户端程序时提供相同的选项来实现此目的 。您还需要确保客户端有权访问该 mysql.sock文件。要找出套接字文件在哪里,您可以执行以下操作:

    language-terminal 复制代码
    $> netstat -ln | grep mysql

    请参见第 B.3.3.6 节"如何保护或更改 MySQL Unix 套接字文件"

  • 您正在使用 Linux,并且一个服务器线程已死亡(转储核心)。在这种情况下,您必须先终止其他 mysqld线程(例如,使用 Kill),然后才能重新启动 MySQL 服务器。请参见第 B.3.3.3 节"如果 MySQL 不断崩溃该怎么办"

  • 服务器或客户端程序可能没有保存 Unix 套接字文件的目录或套接字文件本身的适当访问权限。在这种情况下,您必须更改目录或套接字文件的访问权限,以便服务器和客户端可以访问它们,或者使用一个 选项重新启动mysqld--socket,该选项指定服务器可以创建它的目录中的套接字文件名以及位置客户端程序可以访问它。

如果您收到错误消息Can't connect to MySQL server on some_host,您可以尝试以下操作来找出问题所在:

  • telnet some_host 3306通过执行并按 Enter 键几次来 检查服务器是否正在该主机上运行。(3306 是默认的 MySQL 端口号。如果您的服务器正在侦听不同的端口,请更改该值。)如果有 MySQL 服务器正在运行并侦听该端口,您应该会收到包含服务器版本号的响应。如果您收到诸如 之类的错误telnet: Unable to connect to remote host: Connection refused,则说明给定端口上没有运行服务器。

  • 如果服务器在本地主机上运行,请尝试使用 mysqladmin -h localhost 变量来使用 Unix 套接字文件进行连接。验证服务器配置为侦听的 TCP/IP 端口号(它是变量的值port 。)

  • 如果您在 Linux 下运行并且启用了安全增强型 Linux (SELinux),请参阅第 6.7 节 "SELinux"

B.3.2.2.1 在 Windows 上连接 MySQL 服务器失败

当您在 Windows 上运行 MySQL 服务器并有许多 TCP/IP 连接时,并且您的客户端经常遇到错误Can't connect to MySQL server,原因可能是 Windows 不允许足够的短暂(短暂)为这些连接提供服务的端口。

目的TIME_WAIT是即使在连接关闭后仍保持连接接受数据包。这是因为互联网路由可能会导致数据包采取较慢的路线到达目的地,并且可能在双方都同意关闭后才到达。如果该端口用于新连接,则来自旧连接的数据包可能会破坏协议或泄露来自原始连接的个人信息。延迟 TIME_WAIT通过确保在允许这些延迟的数据包到达一段时间后才能重新使用端口来防止这种情况发生。

大幅减少TIME_WAITLAN 连接是安全的,因为数据包到达时延迟很长的可能性很小,而通过距离和延迟相对较长的互联网则可能如此。

Windows 允许用户使用临时(短暂的)TCP 端口。任何端口关闭后,其 TIME_WAIT状态将保持 120 秒。在该时间到期之前,该端口将不再可用。默认端口号范围取决于 Windows 版本,旧版本中的端口数量更有限:

  • Windows 到 Server 2003:端口范围为 1025--5000

  • Windows Vista、Server 2008 及更高版本:端口范围为 49152--65535

由于有一小堆可用 TCP 端口 (5000) 以及在短时间内打开和关闭的大量 TCP 端口以及状态,TIME_WAIT 您很可能会耗尽端口。有两种方法可以解决这个问题:

  • 通过尽可能研究连接池或持久连接来减少快速消耗的 TCP 端口数量

  • 调整 Windows 注册表中的一些设置(见下文)

重要的

以下过程涉及修改 Windows 注册表。在修改注册表之前,请务必对其进行备份,并确保您了解出现问题时如何恢复注册表。有关如何备份、还原和编辑注册表的信息,请查看 Microsoft 知识库中的以下文章: Windows registry for advanced users - Windows Server | Microsoft Learn

  1. 启动注册表编辑器 ( Regedt32.exe)。

  2. 在注册表中找到以下键:

    language-none 复制代码
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. Edit菜单上,单击Add Value,然后添加以下注册表值:

    language-none 复制代码
    Value Name: MaxUserPort
    Data Type: REG_DWORD
    Value: 65534

    这设置了任何用户可用的临时端口的数量。有效范围介于 5000 和 65534(十进制)之间。默认值为 0x1388(十进制 5000)。

  4. Edit菜单上,单击Add Value,然后添加以下注册表值:

    language-none 复制代码
    Value Name: TcpTimedWaitDelay
    Data Type: REG_DWORD
    Value: 30

    这设置在关闭之前将 TCP 端口连接保持在状态的秒数TIME_WAIT。有效范围为十进制 30 到 300,但您可能希望向 Microsoft 检查最新允许的值。默认值为 0x78(十进制 120)。

  5. 退出注册表编辑器。

  6. 重新启动机器。

注意:撤消上述操作应该与删除您创建的注册表项一样简单。

相关推荐
Mike117.2 小时前
GBase 8a 日期边界写法和时间窗口取数偏差
数据库
SPC的存折3 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧4 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩4 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7775 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
我是伪码农5 小时前
外卖餐具智能推荐
linux·服务器·前端
汤愈韬6 小时前
下一代防火墙通用原理
运维·服务器·网络·security
IMPYLH6 小时前
Linux 的 od 命令
linux·运维·服务器·bash
MatrixOrigin7 小时前
数据库没有死,只是范式变了
数据库·oracle