docker中mysql远程访问慢

时间:2025-04-01 10:55:26

docker中运行的MySQL

本地链接秒连,远程连接慢,经常完全卡死

经研究发现是因为MySQL的dns导致

MySQL如何使用DNS

当一个新线程连接到mysqld时,mysqld将产生一个新线程来处理请求。此线程将首先检查主机名是否在主机名缓存中。否则线程将调用gethostbyaddr\u r()和gethostbyname\u r()来解析主机名。

如果操作系统不支持上述线程安全调用,线程将锁定一个互斥锁,并改为调用gethostbyaddr()和gethostbyname()。请注意,在这种情况下,在第一个线程准备就绪之前,没有其他线程可以解析主机名缓存中没有的其他主机名。

您可以通过使用–skip name resolve启动mysqld来禁用DNS主机查找。在这种情况下,您只能在MySQL特权表中使用IP名称。

如果您有一个非常慢的DNS和许多主机,您可以通过使用–skip name resolve禁用DNS lookop或通过增加主机缓存大小define(默认值:128)并重新编译mysqld来获得更高的性能。

解决方法

1

在配置文件中加入skip-name-resolve

/etc/mysql//

[mysqld]
skip-name-resolve
[mysqld]
pid-file	= /var/run/mysqld/
socket		= /var/run/mysqld/
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/
# By default we only accept connections from localhost
#bind-address	= 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-name-resolve

然后重启容器  docker restart mysql

2 启动命令中使用--skip-name-resolve

docker run --name mysql --skip-name-resolve