千家信息网

mysql中远程连接mysql很慢,本地连接mysql很快怎么处理

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍mysql中远程连接mysql很慢,本地连接mysql很快怎么处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!症状:远程连接 mysql 很慢,但是 本地连接
千家信息网最后更新 2025年11月07日mysql中远程连接mysql很慢,本地连接mysql很快怎么处理

这篇文章主要介绍mysql中远程连接mysql很慢,本地连接mysql很快怎么处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

症状:远程连接 mysql 很慢,但是 本地连接 mysql 很快, ping 和 route 网络通信都是正常的。

解决:mysql 的配置文件中增加如下配置参数:
[mysqld]
skip-name-resolve

原理:

作为MySQL调优的一部分,很多人都推荐开启skip_name_resolve。这个参数是禁止域名解析的(当然,也包括主机名)。很多童鞋会好奇,这背后的原理是什么,什么情况下开启这个参数比较合适。

基于以下原因,MySQL服务端会在内存中维护着一份host信息, 包括三部分:IP,主机名和错误信息。主要用于非本地TCP连接。

1. 通过在第一次建立连接时缓存IP和host name的映射关系,同一主机的后续连接将直接查看host cache,而不用再次进行DNS解析。

2. host cache中同样会包含IP登录失败的错误信息。可根据这些信息,对这些IP进行相应的限制。后面将会具体提到。

host cache的信息可通过performance_schema中host_cache表查看。

那么,IP和host name的映射关系是如何建立的呢?

1. 当有一个新的客户端连接进来时,MySQL Server会为这个IP在host cache中建立一个新的记录,包括IP,主机名和client lookup validation flag,分别对应host_cache表中的IP,HOST和HOST_VALIDATED这三列。第一次建立连接因为只有IP,没有主机名,所以HOST将设置为NULL,HOST_VALIDATED将设置为FALSE。

2. MySQL Server检测HOST_VALIDATED的值,如果为FALSE,它会试图进行DNS解析,如果解析成功,它将更新HOST的值为主机名,并将HOST_VALIDATED值设为TRUE。如果没有解析成功,判断失败的原因是永久的还是临时的,如果是永久的,则HOST的值依旧为NULL,且将HOST_VALIDATED的值设置为TRUE,后续连接不再进行解析,如果该原因是临时的,则HOST_VALIDATED依旧为FALSE,后续连接会再次进行DNS解析。

另,解析成功的标志并不只是通过IP,获取到主机名即可,这只是其中一步,还有一步是通过解析后的主机名来反向解析为IP,判断该IP是否与原IP相同,如果相同,才判断为解析成功,才能更新host cache中的信息。

基于上面的总结,下面谈谈 host cache的优缺点:

缺点:当有一个新的客户端连接进来时,MySQL Server都要建立一个新的记录,如果DNS解析很慢,无疑会影响性能。如果被允许访问的主机很多,也会影响性能,这个与host_cache_size有关,这个参数是5.6.5引入的。5.6.8之前默认是128,5.6.8之后默认是-1,基于max_connections的值动态调整。所以如果被允许访问的主机很多,基于LRU算法,先前建立的连接可能会被挤掉,这些主机重新进来时,会再次进行DNS查询。

优点:通常情况下,主机名是不变的,而IP是多变的。如果一个客户端的IP经常变化,那基于IP的授权将是一个繁琐的过程。因为你很难确定IP什么时候变化。而基于主机名,只需一次授权。而且,基于host cache中的失败信息,可在一定程度上阻止外界的暴力破解攻击。

关于阻止外界的暴力破解攻击,涉及到max_connect_errors参数,默认为100,官方的解释如下:

If more than this many successive connection requests from a host are interrupted without a successful connection, the server blocks that host from further connections.

如果某个客户端的连接达到了max_connect_errors的限制,将被禁止访问,并提示以下错误:

Host 'host_name' is blocked because of many connection errors.Unblock with 'mysqladmin flush-hosts'

下面来模拟一下

首先,设置max_connect_errors的值

即便后来使用了正确的账号和密码登录,依旧会被阻止。

再来看看host_cache表中的信息,sum_connect_errors为2了。

如果该参数设置为OFF,则上述方式就会报错,通过报错信息可以看出,它直接将127.0.0.1转化为localhost了。

[root@localhost ~]# mysql -uroot -h227.0.0.1 -p123456 -P3306Warning: Using a password on the command line interface can be insecure.ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

注意: 't1'@'%'中包含't1'@'127.0.0.1',如果开启skip_name_resolve参数,则't1'@'%'中定义的密码可用于't1'@'127.0.0.1'的登录,如果没有开启该参数,则't1'@'127.0.0.1'会转化为't1'@'localhost'登录,此时't1'@'%'定义的密码并不适用。

以上是"mysql中远程连接mysql很慢,本地连接mysql很快怎么处理"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

主机 信息 参数 成功 客户 登录 很快 再次 原因 密码 错误 处理 相同 内容 原理 只是 外界 客户端 性能 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 战锤3无法访问服务器怎么办 数据库主要的安全威胁 编程毕业论文选题数据库 易语言连接数据库取全部数据 网络安全大赛 注重 查询中奖记录使用什么数据库 网络安全大赛江西 澳大利亚网络安全计划 如何加强web服务器的安全 河南地区dns服务器云服务器 服务器中的共享管理在哪里 堡垒之夜世界战场服务器 怎么向软件开发人员推销保险 安徽联想服务器维修调试多少钱 郑州大学网络安全复试名单 学校网络安全演练通知 计算机网络技术的工作经历 我与网络安全有个约定手抄报幼儿 sp-lock在数据库的意思 网络安全专业好还是软件工程好 cf进不去服务器 多媒体数据库应用实例 软件开发对个人的影响 山东八七网络技术有限公司 荣成租房网络安全 阿里云服务器去除安全骑士 国寿财险软件开发待遇 mysql查看数据库类型 软件开发一般学习多久 山东聊城的中心服务器云空间
0