连接mysql报错:error 2003 (hy000):can't connect to mysql server on 'localhost' (10061)

说实话,这个ERROR2 003 在论坛上提过无数次了,每次碰到都得像侦探一样查线索。
我当年第一次碰见,手忙脚乱半天,后来发现是电脑休眠自动关了服务——这事儿你绝对想不到。

比如说吧,有次我租的服务器突然连不上,按步骤排查才发现是云服务商搞了个夜间自动降频,CPU掉到1 0%以下MySQL就卡死。
这属于"MySQL服务未启动"的变种,但不是典型场景。
所以第一反应对,但具体情况还得具体看。

有意思的是防火墙问题,我有个客户用的是企业级防火墙,他那边把MySQL端口直接封了,还美其名曰"安全考虑"。
结果呢?每次他远程维护都骂骂咧咧说连不上,最后发现是管理员忘了把规则加到安全组。
这提醒我,查防火墙时不能只看本地设置,得确认服务商那头没搞事。

说到端口问题,我遇到过更离谱的。
有个开发者习惯用3 3 07 端口跑测试环境,结果生产环境还是用默认3 3 06 ,直接对不上。
这种时候光查配置文件不够,得确认客户端连接参数里端口号对没对。
我有个习惯,本地开发时在连接字符串里显式写死端口,避免这种乌龙。

最头疼的是Linux系统,bind-address参数那会儿简直像密码学难题。
有个客户用双网卡服务器,把bind-address设成1 9 2 .1 6 8 .1 .1 ,结果他写脚本连1 9 2 .1 6 8 .2 .1 ,永远连不上。
这得知道客户实际网络拓扑才能查对,单纯看配置文件肯定白费力气。

至于那个skip-name-resolve,我确实用过。
有个VPS DNS解析特别慢,每次连接都超时,临时加了这个参数秒连。
但后来发现是服务商DNS服务器出问题,换了服务商就好了。
所以这招只能当临时手段,不能当万能药。

网络问题有时候最狡猾。
我碰到过一次,客户端和服务器在同一交换机,ping1 00%正常,但就是连不上。
最后发现是服务器网卡驱动在特定负载下会间歇性丢包,换驱动才解决。
这种时候ping命令就是个安慰剂。

说实话,解决这种问题就像拼图,每个错误提示都是一块碎片,得组合起来才看明白。
你想想,服务没启动是最直接的,但防火墙、端口、网络、配置...这些环节都可能出问题,而且往往不是单一原因。
我当时整理过个排查清单,按顺序试:
1 . 确认服务确实没启动(用systemctl status mysql看) 2 . 检查本机防火墙(命令行netstat -an | findstr "3 3 06 "更靠谱) 3 . 确认bind-address是1 2 7 .0.0.1 (远程连接的话要改成服务器IP) 4 . 对比客户端连接参数里的port值 5 . 用telnet localhost 3 3 06 看端口是否真的在监听 6 . 最后怀疑网络问题,但要注意同一网络内也可能出问题
这种时候有个小技巧特别有用:在服务器上创建一个只含root密码的账户,用客户端工具直接连接。
如果这个账户能连,说明配置没问题,问题出在特定连接设置上。
我有个客户花了3 天查端口,最后发现是工具软件自带的连接参数有问题。

这个网页代码挺复杂的... 2 02 2 年的时候,我还在用 IE 浏览器,那时候就感觉知道挺慢的。
现在 2 02 3 年了,换到 Chrome 快多了。
这个页面上有好多 JS 文件,什么 userbar-renew.js、search-box-new.js,看起来都是用来做功能的。
京ICP证03 01 7 3 号-1 这是什么?好像是个证件号。
然后京网文【2 02 3 】1 03 4 -02 9 号,也是证件相关的。
©2 02 6 Baidu,版权是到 2 02 6 年。
这些脚本代码,看不懂,但知道它们能让页面动起来。

解决修改 my.ini 文件后重启 MySQL 服务后无法启动服务 ERROR2003(10061)

这事儿我懂,2 02 2 年我在上海遇到过。

当时改完my.ini,重启MySQL就卡在那儿了,控制台直接报ERROR2 003 (1 006 1 )。
这错误一看就是端口问题,MySQL连不上。

第一反应是,这my.ini是不是改坏了?赶紧找备份。
2 02 2 年那会儿备份习惯还没养成好,硬着头皮先恢复。
恢复完,MySQL“噌”一下就启动了。
嗯,肯定是我改my.ini的时候出岔子了。

打开my.ini文件,我仔仔细细看。
看到[mysqld]那块,port是3 3 06 ,我检查了,没被其他东西占着。
bind-address我设成了1 2 7 .0.0.1 ,就想localhost连接。
行吧,可能是我忘了,有时候得改成0.0.0.0才能让外头机器连。
还有那个skip-networking,我确保没把它打开,不然就不监听了。

然后防火墙!我赶紧去Windows防火墙那儿瞅瞅,看是不是给MySQL给封了。
还好,没封。
我就把3 3 06 端口加进去,允许入站。

不行啊,还是不行。
我就去看日志。
MySQL日志在那儿,C:\ProgramData\MySQL\MySQL Server 8 .0\logs\mysql_error.log,我找找ERROR2 003 里面就一句“Error: Can't connect to MySQL server on '1 2 7 .0.0.1 ' at port 3 3 06 (1 006 1 )”。
嗯,1 2 7 .0.0.1 ,对,就是这儿。

那我再改回来,bind-address改成0.0.0.0试试。
重启MySQL,还是不行。
我再去看防火墙,心想,是不是安全组也设置了?Windows防火墙没问题,我再去看电脑上装的其他安全软件,也关了。

咋回事呢?我就想,会不会是端口真的被占用了?我打开命令行,netstat -ano | findstr 3 3 06 结果一晃一大堆,我找找,嚯,发现有个PID是9 9 9 9 的东西占用了3 3 06 那东西是个旧版本的数据库服务,忘了关了。
我直接结束那个进程,嘿,MySQL立马就启动了!
所以你看,这种问题有时候怪怪的。
可能是我改my.ini的时候,改了bind-address,但没注意到端口其实被旧服务占用了。
一步步排查,先看最简单的配置文件,然后防火墙,然后端口占用,最后看日志。
2 02 2 年那会儿花了不少时间,真是烦人。

MySQL运行问题之 Can't connect to MySQL server on 'localhost:3306' (10061)

这个错误我之前也遇到过,挺烦人的。
上周有个客人问我这个连接问题,我就给他整理了一下解决方法。

首先,你得检查一下MySQL服务是不是在运行。
在Windows系统里,你可以打开“计算机管理”,然后找到“服务”,看看MySQL服务是不是“已停止”。
如果是,就把它启动起来。

然后,你得确认一下MySQL服务是不是真的启动成功了。
启动之后,再试一次连接,看问题还在不在。

如果服务是开的,但连接还是不行,那可能得看看防火墙设置。
你得确保防火墙允许3 3 06 端口的数据传输。

接着,你还得检查一下MySQL的配置文件,比如my.cnf或my.ini。
看看里面的bind-address和port参数设置得对不对。

有时候,你还可以用命令行工具,比如netstat,来检查一下MySQL端口是不是在监听。

如果这些都搞定了还是不行,那你就得看看MySQL的错误日志了。
错误日志一般在你MySQL的数据目录里,文件名可能是hostname.err或者mysql-error.log。

最后,如果问题还是解决不了,那可能就是MySQL安装有问题了。
这时候,你就可以考虑卸载MySQL,然后重新安装。

反正你看着办,这些方法基本上都能解决这个连接问题。
如果还是不行,那可能就得找专业人士帮忙了。
我还在想这个问题,希望下次能帮到更多人。