首页 > 数据库 >MySQL错误ERROR 2003 (HY000) Can't connect to MySQL server .' (111)

MySQL错误ERROR 2003 (HY000) Can't connect to MySQL server .' (111)

时间:2023-03-24 14:45:12浏览次数:46  
标签:127.0 0.1 bind address HY000 server mysqld MySQL

在MySQL中,如果访问/连接MySQL数据库时遇到“ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx:xxx' (111)”这个错误,我们应该从哪些方面进行考虑和排查问题呢? 下图是我总结整理的一个思维导图,在遇到这个错误时的排查方向和排查思路。

下面来演示/介绍一个比较特殊的案例,在服务器上访问当前主机的MySQL时遇到了“ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:7306' (111)”

$ mysql -h 127.0.0.1 -u test -p  --port=7306
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:7306' (111)
$ perror 111
OS error code 111:  Connection refused

其实访问本地MySQL,根本不用检查127.0.0.1这个IP是否能ping通,不过为了以防万一,我们还是验证一下

$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.073 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.071 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.072 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.071 ms
^C
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4099ms
rtt min/avg/max/mdev = 0.046/0.066/0.073/0.013 ms

检查MySQL实例状态

然后我们检查一下MySQL服务是否正常,MySQL实例是否Crash掉了。

方式1:

$ sudo systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-03-13 15:01:43 CST; 1 weeks 2 days ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 143115 (mysqld)
   Status: "Server is operational"
    Tasks: 47 (limit: 49256)
   Memory: 1.4G
   CGroup: /system.slice/mysqld.service
           └─143115 /opt/mysql/mysql8.0/bin/mysqld --defaults-file=/data/conf/my.cnf

Mar 13 15:01:40 yictmysqlu01 systemd[1]: Starting MySQL Server...
Mar 13 15:01:43 yictmysqlu01 systemd[1]: Started MySQL Server.

方式2:

ps -Af | grep mysqld | grep -v grep
mysql     143115       1  1 Mar13 ?        03:47:43 /opt/mysql/mysql8.0/bin/mysqld --defaults-file=/data/conf/my.cnf

如上所示,MySQL实例正常的,所以可以排除MySQL实例关闭或MySQL实例Crash的情况。

检查MySQL的监听端口

使用下面命令检查MySQL的监听端口

$ netstat -lnp | grep mysql
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.9.203:7306      0.0.0.0:*               LISTEN      143115/mysqld       
tcp6       0      0 :::33060                :::*                    LISTEN      143115/mysqld       
unix  2      [ ACC ]     STREAM     LISTENING     3188552  143115/mysqld        /tmp/mysqlx.sock
unix  2      [ ACC ]     STREAM     LISTENING     3191315  143115/mysqld        /tmp/mysql.sock

如上所示,监听端口为7306,访问MySQL时指定的端口号也是7306,没有什么毛病。因此也可以排查这个因素。

检查参数bind-address

检查MySQL的配置文件中的bind-address参数

方式1:

$ grep bind_address my.cnf
bind_address=192.168.9.203

方式2:

mysql> SELECT VARIABLE_NAME, VARIABLE_VALUE
    -> FROM performance_schema.global_variables
    -> WHERE VARIABLE_NAME = 'bind_address';
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| bind_address  | 192.168.9.203   |
+---------------+----------------+
1 row in set (0.01 sec)

mysql>

bind-address的设置有以下三种情况:

bind-address=127.0.0.1  #只允许本机访问。
bind-address=某个网卡的ip #例如bind-address=192.168.9.203,只能通过ip为192.168.9.203的网卡访问。
bind-address=0.0.0.0    #此规则是系统默认配置,监听所有网卡,即允许所有ip访问。

这里由于设定参数bind_address=192.168.9.203,所以当我们使用127.0.0.1访问数据库就会被拒绝,从而抛出上面的错误。

那么这里有一个问题,如果数据库里面创建了两个账号test@'127.0.0.1'和test@'localhost',那么test@'localhost'是否也会遇到这个错误呢?你的答案是会还是不会呢? 正确答案是不会,因为localhost和127.0.0.1两者是有所区别的(下面部分内容来自参考资料[1]):

一、原理不同:

localhost的原理是不经网卡传输,不会受到网卡协议的限制。设置程序时本地服务用localhost,localhost不会解析成IP,也不会占用网卡、网络资源。 127.0.0.1的原理是经过网卡传输的,依赖网卡协议,并受到网卡相关协议的限制。使用IP访问的时候,等于本机是通过网络再去访问本机,会涉及到网络用户的权限。

二、概念不同

localhost:也可以叫是local,正确的解释是:本地服务器的意思。它可以被配置为任意的IP地址可以通过hosts这个文件进行更改,不过通常情况下都指向:127.0.0.1 127.0.0.1:在windows系统的正确解释是:本机地址的意思。127.0.0.1是保留地址之一,用来检验本机TCP/IP协议栈,可以Ping回送地址。如果回送地址Ping不通,就说明IP堆栈出了故障。如果通的话,表明网络出了问题。

三、指向不同

localhost是一个保留域名(RFC 2606) ,为了避免同狭义定义主机名混淆而单独列出。它不仅指向 127.0.0.1 这个IP地址,它同时还可以指向ipv6 的地址 。 127.0.0.1 是回送地址,指本地机,测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。

具体原因如下:

mysql -h 127.0.0.1 访问MySQL的时候,使用 TCP/IP 连接

mysql -h localhost 访问MySQL的时候,它不会使用 TCP/IP 连接的,而使用Unix socket;此时,MySQL Server则认为该 client 是来自 “localhost”

参考资料

[1]

参考资料: https://www.termilk.com/181.html

标签:127.0,0.1,bind,address,HY000,server,mysqld,MySQL
From: https://www.cnblogs.com/kerrycode/p/17251451.html

相关文章

  • Sql Server 迁移登录以及密码
          1、查询现有的sqlserver实例中的账号信息:           selectt.name,t.sid,t.password_hash            fromsys.sql_loginst......
  • windows安装mysql超详细
    windows系统下安装mysql1、下载mysql安装包https://downloads.mysql.com/archives/community/   #mysql安装包下载地址         2:将解压文件解......
  • VisualSVN Server 安装提示错误 Repositories is not a valid short file name 修复
    最近安装新版 VisualSVNServer总在安装过程提示错误:“'Repositories'isnotavalidshortfilename.”点确定后安装过程就终止了,不能继续。找了下问题原因,发现是因......
  • Linux下Mysql数据库的基本使用
    (Linux下Mysql数据库的基本使用)一、Mysql的delete删除语法1.删除数据库①使用drop删除mysql>mysql>showdatabases;+--------------------+|Database......
  • MySql 死锁
    MySql死锁一、什么是死锁InnoDB存储引擎定义了四种类型的行锁隔离等级对加锁的影响当前数据对加锁的影响二、为什么会形成死锁两阶段锁协议产生死锁的四个必要条件三、MySQ......
  • CentOS7关机重启之后,Mysql8启动不成功
    我在自己电脑上使用VM工具安装了虚拟机,CentOS7,里面继续安装了mysql8,下班的时候,直接把整个虚拟机关机了,没有依次关闭里面的服务,早上来的时候发现启动不来mysql 它提示用......
  • linux系统下mysql自动定时脚本
    查看脚本代码#!/bin/bash#备份路径BACKUP=/mnt/databackup/sql#当前时间DATETIME=$(date+%Y-%m-%d)echo"===备份开始==="#数据库名称DATABASE=hysoftv21_zs......
  • 设置Mysql sort_buffer_size参数
    按照官网的解释:Eachsessionthatmustperformasortallocatesabufferofthissize.sort_buffer_sizeisnotspecifictoanystorageengineandappliesinag......
  • Mysql如何随机抽取不重复数据
    使用RAND()函数随机抽取指定条数的数据SELECT*FROMyour_tableORDERBYRAND()LIMIT#{limit}这样有一个问题,就是可能抽取到重复的数据改进办法,加distinc......
  • MySQL 事物及隔离级别
    阅读目录一、事务的基本要素(ACID)二、事务的四种隔离级别三、事务的并发问题四、MVCC在MySQL的InnoDB中的实现五MySQL死锁六EXPLAIN分析语句七锁的定义一、事务的......