博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
阅读量:5321 次
发布时间:2019-06-14

本文共 2046 字,大约阅读时间需要 6 分钟。

问题描述:

从一台Linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.85'(111)错误。

[mysql@vvmvcs0 ~]$ mysql -hxxx.xxx.xxx.85 -uroot -p

Enter password: www.2cto.com
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.85' (111)
// 查看errorCode:
[mysql@vvmvcs0 ~]$ perror 111
OS error code 111: Connection refused

问题分析:

1、可能网络连接问,远程ping xxx.xxx.xxx.85 ,能ping通,排除此情况。

[mysql@vvmvcs0 ~]$ ping xxx.xxx.xxx.85

PING xxx.xxx.xxx.85 (xxx.xxx.xxx.85) 56(84) bytes of data.
64 bytes from xxx.xxx.xxx.85: icmp_seq=1 ttl=63 time=0.230 ms

2、排查可能由于85上my.cnf里配置了skip_networking或者bind_address,只允许本地socket连接。

    2.1、在[mysqld]下设置skip_networking

知识说明: 这使MySQL只能通过本机Socket连接(socket连接也是本地连接的默认方式),放弃对TCP/IP的监听,当然也不让本地java程序连接MySQL(Connector/J只能通过TCP/IP来连接)。

    2.2、可能使用bind_address=127.0.0.1(当然也可以是其他ip)

[mysqld]

bind_address=127.0.0.1
知识说明:这种情况可以TCP/IP连接
通过查看了my.cnf文件,以上两个都是没设置的,排除掉这两种情况

3、排查DNS解析问题,检查是否设置了:skip_name_resolve。 这个情况肯定不可能,因为我用的是ip,不是主机名。

[mysqld]

skip_name_resolve
知识说明:这个参数加上后,不支持主机名的连接方式。

4、排查用户和密码问题, 其实用户和密码的错误,不会出现111的,所以排除用户密码问题

ERROR 1045 (28000): Access denied for user 'root'@'XXXX' (using password: YES)

5、排查--port问题,有可能85的MySQL port不是默认3306,这样我远程连接时,没有指定--port,用的是3306, 而85上没有对3306进行监听。

ps -ef | grep mysqld

果然,85上的MySQL使用的是3308 port.
最终连接方式:加上--port=3308
[mysql@vvmvcs0 ~]$ mysql -hxxx.xxx.xxx.85 -uroot -p --port=3308
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.

为什么出现这么低级的错误呢?

因为我一直在用85上的MySQL, 而且每次都是直接用mysql -uroot就连接上了,没有指定--port,所以就一直以为MySQL的port是默认的3306。

其实根本原因是:

1、MySQL本地连接,如果不指定mysql --protocol=tcp, 连接默认是socket方式连接的。

2、MySQL socket连接是根据sokect文件来的,与--port不相关的,如果是一机多实例,则用-S(或者--socket=name )来指定连接哪个实例。就是这个socket连接对--port无识别效果,导致排查这个问题这么久。

PS:其实85上只有一个port为3308的MySQL实例,但是用3306仍然是连接上此实例,说明socket连接方式忽略--port参数

-bash-3.2$ mysql -uroot --port=3308

Welcome to the MySQL monitor. Commands end with ; or \g.
mysql -uroot --port=3306
Welcome to the MySQL monitor. Commands end with ; or \g.

再次说明基础细节很重要啊。

原文链接:

转载于:https://www.cnblogs.com/gotodsp/p/5674860.html

你可能感兴趣的文章
PHP超级配置模块
查看>>
用canvas 来实现一个菊花
查看>>
[Apple开发者帐户帮助]六、配置应用服务(3)创建地图标识符和私钥
查看>>
poj2388---求奇数个数字的最中间的数
查看>>
对闭包的理解
查看>>
java.lang.OutOfMemoryError异常解决方法
查看>>
Css让文字自适应Table宽度[转]
查看>>
[Javascript] Flattening nested arrays: a little exercise in functional refactoring
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
使用maven构建多模块项目,分块开发
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
jffs2镜像制作
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
C#高级编程笔记(一)
查看>>
工作时如何利用空闲时间熟悉项目
查看>>
大道至简第五章读后感
查看>>
Code Snippet
查看>>
MFC模态对话框程序不响应OnIdle
查看>>
Node.js Express项目搭建
查看>>