侧边栏壁纸
  • 累计撰写 49 篇文章
  • 累计创建 29 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

【Docker】Mysql连接很慢

JHL&WWZ
2022-06-20 / 0 评论 / 0 点赞 / 1,106 阅读 / 664 字 / 正在检测是否收录...

问题描述:

内网Docker中安装了Mysql,在使用连接工具进行连接时,发现连接很慢(十几秒左右)。

原因分析:

查阅相关资料得知,由于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来获得更高的性能。

这里我推断,由于docker镜像安装时安装的是最小容器,因此缺少DNS解析等某些模块,所以连接时会出现连接超慢的问题。

解决方案:

1. 修改Mysql配置

进入docker中的mysql容器的shell命令行

docker exec -it 容器ID bash

以下是退出容器shell的命令

exit

编辑相关配置

vi /etc/mysql/mysql.conf.d/mysqld.cnf

如果提示没有vi命令,外网可以安装一个,内网环境的话可以选择执行命令查找服务器上的docker中的mysql地址

find / -name mysqld.cnf

找到docker中的mysql配置,修改所有找到的docker中mysql的配置信息。
添加禁用DNS反向解析配置,skip-name-resolve

[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

修改后进行重启容器,解决

2. 启动时添加参数

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

同样可以解决

来源:https://blog.csdn.net/weixin_43464964/article/details/122837704

0

评论区