CentOS的MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题

原创 2018年04月17日 16:37:45

   今天在CentOS7虚拟机上安装了mysql,想要在宿主机上远程连接,结果一直报错,就百度了原因,这里分享一篇博客以及自己的一点知识。

   引用:

问题描述:

从一台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)

[mysql@vvmvcs0 ~]$ perror 111
OS error code 111: Connection refused
查看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的监听 www.2cto.com
当然也不让本地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.
其实根本原因是:
1. MySQL本地连接,如果不指mysql --protocol=tcp, 连接默认是socket方式连接的。这点大家都知道。
2, MySQL socket连接是根据sokect文件来的,与--port不相关的,如果是一机多实例,则用-S(或者--socket=name )来指定连接哪个实例。
就是这个socket连接对--port无识别效果,导致排查这个问题这么久。
见下面: 其实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.
再次说明基础细节很重要啊。


   以上是博主分享的各种问题,我经过了上边所有排查,结果依然连接不上。突然灵机一动就想到了系统防火墙,这么重要的细节自己竟然忘掉了,centOS上的防火墙还开着呢,怎么能远程连接。然后关闭防火墙就实现了完美连接。

    这里附上centos有关防火墙的操作:

CentOS6.5查看防火墙的状态:

1
[linuxidc@localhost ~]$service iptable status

  显示结果:

1
2
3
4
5
[linuxidc@localhost ~]$service iptable status
Redirecting to /bin/systemctl status  iptable.service
● iptable.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)  --表示防火墙已经关闭

    CentOS 6.5关闭防火墙

1
2
[root@localhost ~]#servcie iptables stop                    --临时关闭防火墙
[root@localhost ~]#chkconfig iptables off                    --永久关闭防火墙

    CentOS 7.2关闭防火墙

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。


firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

1
2
[root@localhost ~]#firewall-cmd --state
not running

   检查防火墙的状态:

从centos7开始使用systemctl来管理服务和程序,包括了service和chkconfig。

1
2
[root@localhost ~]#systemctl list-unit-files|grep firewalld.service            --防火墙处于关闭状态
firewalld.service                          disabled

  或者

1
2
3
4
[root@localhost ~]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

   关闭防火墙:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

1
2
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#systemctl disable firewalld.service
1
2
3
4
5
6
7
8
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled




CentOS6.5查看防火墙的状态:

1
[linuxidc@localhost ~]$service iptable status

  显示结果:

1
2
3
4
5
[linuxidc@localhost ~]$service iptable status
Redirecting to /bin/systemctl status  iptable.service
● iptable.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)  --表示防火墙已经关闭

    CentOS 6.5关闭防火墙

1
2
[root@localhost ~]#servcie iptables stop                    --临时关闭防火墙
[root@localhost ~]#chkconfig iptables off                    --永久关闭防火墙

    CentOS 7.2关闭防火墙

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。


firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

1
2
[root@localhost ~]#firewall-cmd --state
not running

   检查防火墙的状态:

从centos7开始使用systemctl来管理服务和程序,包括了service和chkconfig。

1
2
[root@localhost ~]#systemctl list-unit-files|grep firewalld.service            --防火墙处于关闭状态
firewalld.service                          disabled

  或者

1
2
3
4
[root@localhost ~]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

   关闭防火墙:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

1
2
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#systemctl disable firewalld.service
1
2
3
4
5
6
7
8
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled

CentOS6.5查看防火墙的状态:

1
[linuxidc@localhost ~]$service iptable status

  显示结果:

1
2
3
4
5
[linuxidc@localhost ~]$service iptable status
Redirecting to /bin/systemctl status  iptable.service
● iptable.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)  --表示防火墙已经关闭

    CentOS 6.5关闭防火墙

1
2
[root@localhost ~]#servcie iptables stop                    --临时关闭防火墙
[root@localhost ~]#chkconfig iptables off                    --永久关闭防火墙

    CentOS 7.2关闭防火墙

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。


firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

1
2
[root@localhost ~]#firewall-cmd --state
not running

   检查防火墙的状态:

从centos7开始使用systemctl来管理服务和程序,包括了service和chkconfig。

1
2
[root@localhost ~]#systemctl list-unit-files|grep firewalld.service            --防火墙处于关闭状态
firewalld.service                          disabled

  或者

1
2
3
4
[root@localhost ~]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

   关闭防火墙:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

1
2
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#systemctl disable firewalld.service
1
2
3
4
5
6
7
8
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service;echo $?
查看已启动的服务列表:systemctl list-unit-files|grep enabled

MySQL远程访问报错ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111)

从一台linux远程连接另一台linux上的MySQL, mysql -hxxx.xxx.xxx.xxx -uroot -p 出现ERROR 2003 (HY000): Can't conn...
  • a5nan
  • a5nan
  • 2017-06-05 10:04:07
  • 1008

ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xx.xxx' (111)

一.问题描述     远程连接mysql数据库的时候报如下错误 ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xx.x...
  • shaochenshuo
  • shaochenshuo
  • 2015-12-30 15:03:01
  • 5124

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.10.210' (111) 解决方法

今天在测试mysql的连接时候,发现连接不通过,并报错ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.10.210' (11...
  • Richar1
  • Richar1
  • 2016-03-21 19:29:27
  • 7032

解决"ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.247.128' (111)"

1. 问题描述 在连接数据库时出现连接失败信息: xx@ubuntu:~$ mysql -h192.168.247.128 -uroot -p123456 mysql: [Warning] Using...
  • Cryhelyxx
  • Cryhelyxx
  • 2015-01-25 19:03:38
  • 3125

centos6下解决"ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.2.200' (113)"

1. 问题描述 远程访问192.168.2.200主机的mysql数据库时, 出现以下错误: # mysql -host192.168.2.200 -uroot -p Enter password: ...
  • Cryhelyxx
  • Cryhelyxx
  • 2015-01-28 13:51:25
  • 7506

Ubuntu ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

配置远程连接mysqlMySQL>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT O...
  • dongwuming
  • dongwuming
  • 2016-07-25 10:42:31
  • 5040

MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题

装了个navicat ,然后去连接mysql服务器,一直连不上,一开始以为是防火墙问题,后来防火墙都关闭,  iptable服务关闭,还是不行,网上查了下:主要是因为设置了bind_address=...
  • qustdjx
  • qustdjx
  • 2014-05-25 09:57:34
  • 123949

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.165' (113)

1、程序报错: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link 2、尝试远程连接数据库: ...
  • chengyuqiang
  • chengyuqiang
  • 2017-01-09 12:50:17
  • 6005

MySQL 数据库连接失败 SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (13)

CentOS6.5x64 安装禅道6.2,生成配置文件,数据库连接失败 数据库连接失败 SQLSTATE[HY000] [2003] Can't connect to MySQL server...
  • liu251890347
  • liu251890347
  • 2015-08-26 09:03:24
  • 5473

在控制台中输入msqyl一直报ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'错误

错误: 在绿色Mysql的bin文件下打开cmd,输入mysql,一直报ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost...
  • chali22
  • chali22
  • 2017-07-21 13:59:12
  • 346
收藏助手
不良信息举报
您举报文章:CentOS的MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
举报原因:
原因补充:

(最多只允许输入30个字)