docker中mysql远程访问慢

16 篇文章 0 订阅

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/mysql.conf.d/mysqld.cnf

[mysqld]
skip-name-resolve
[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log
# 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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysnownet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值