Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.Connection refused: getsockopt这是具体报错显示一开始走了很多弯路比如显示设置本机连接mysql的连接配置参数还有调整 MySQL 配置的wait_timeout参数将其设置为更长的时间如 24 小时以避免因连接空闲时间过长而被自动断开。等等。。。然而发现都不行直到去检查mysql的监听端口$ netstat -lnp | grep mysql一开始是只有下面两行也就是MySQL 没有监听 TCP / IP 端口这意味着MySQL 只监听了 Unix 套接字文件用于本机连接MySQL 没有监听 TCP / IP 端口无法接受远程连接去检查mysql关键配置skip-networking- 如果有这个参数必须注释掉bind-address- 确保不是127.0.0.1看了/etc/my.cnf配置文件也没发现问题然后进入mysqlmysql SHOW VARIABLES LIKE skip_networking;好家伙问题出现了但是问题是我的配置文件也没有设置这个啊我就寻思配置文件加上了skip_networkingoff显示的关闭它然后重启mysql服务再去查询发现skip_networking还是on开启的状态想要临时修改SET GLOBAL skip_networking OFF;就报错了mysql SET GLOBAL skip_networking OFF;ERROR 1238 (HY000): Variable skip_networking is a read only variable他是个只读的变量只能通过配置文件进行修改后面我就猜测会不会配置文件不对还有其他配置文件可能有优先级的影响mysql --help | grep Default options -A 1# 根据上一步得到的路径逐一查看文件内容sudo cat /etc/my.cnfsudo cat /etc/mysql/my.cnf# 如果还有 ~/.my.cnf (这是root用户的家目录)sudo cat /root/.my.cnf但是问题还是不在这里下一步就去参看mysql的启动参数的影响确认没有skip_networking类似设置查询# 在MySQL中执行SHOW VARIABLES LIKE port;确定问题就是skip_networking所致后面查询相关资料在配置文件中的[mysqld]部分下除了skip_networking同时还配置了skip_grant_tables跳过权限验证那么 MySQL 会出于安全考虑强制开启skip_networking并且忽略你对skip_networking的设置。这是 MySQL 官方在 8.0.3 版本后引入的安全机制目的是为了防止在跳过权限验证这个高风险状态下数据库被外部网络攻击 。单独使用--skip-grant-tables相当于为数据库打开了 “免密后门”而--skip-networking则确保了只有能直接操作服务器的用户才能走这个后门杜绝了远程风险 。至此问题终于解决去配置文件注释掉skip_grant_tables即可