[转]MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
问题描述:
从一台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.
再次说明基础细节很重要啊。
原文链接:MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'的问题
相关文章
- MySQL :: MySQL Installation Guide :: 7.6.1 Basic Steps for MySQL Server Deployment with Docker
- SQL Server - Management Studio - Client Statistics - Wait time on server replies vs Client processing time
- mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/mysql/data/mysql.pid) 的解决方法
- MySQL实战系列4: 主从复制、读写分离、备份恢复全解析
- mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
- Mysql mysql lost connection to server during query 问题解决方法
- cant connect to mysql server on
- 【mysql报错】ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘
- JDBC 连接 MySQL 异常:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
- com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 ‘DUAL‘ 无效 | Druid双数据源MySQL+SQL server
- ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061),mysql服务已启动
- 转 mysql PS1个性化 和 mysql 客户端的 --quick 选项
- libaio.so.1()(64bit) is needed by MySQL-server 问题解决办法
- Mysql 5.7源码编译启动 报error问题:The server quit without updating PID file (/data/data_mysql/mysql.pid).
- python操作mysql数据库系列-操作MySql数据库(一)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- SpringBoot+mybatis-plus+mysql实现简单后台管理demo
- php远程连接mysql数据库的步骤
- perationalError: (2003, "Can't connect to MySQL server on u'192.168.1.6' (timed out)")
- mysql报错:Can’t start server: Bind on TCP/IP port: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
- Mac - Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- Mysql启动时提示:Another MySQL daemon already running with the same unix socket.
- Oracle、SQL Server、MySQL数据类型对比
- MySQL 安装mysql数据库
- Mysql 1290 - The MySQL server is running with the --secure-file-priv option
- Navicat连接数据库出现 is not allowed to connect to this MySQL server 报错