1.开端

由于我的番茄小说下载API的V4版本改用了MySQL数据库,为了方便部署,就想把MySQL和程序用Docker打包起来

经过一系列准备,终于打包起来并成功运行了

但是,奇怪的是,我发现MySQL连接特别缓慢,需要将近30秒!

无论是我使用Navicat连接还是docker内程序的连接都是这样

这就导致请求的返回非常缓慢,甚至超时报错

直接使用官方镜像测试也是如此

系统环境:WSL2 镜像网络模式

MySQL镜像版本:8.0-debian

2.查找解决方案

我在Google上以 docker mysql 慢 为关键词搜索,得到的回答是

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

需要修改MySQL配置文件解决

于是我在我的Dockerfile中加入了:

1
RUN echo "skip-name-resolve" >> /etc/mysql/my.cnf

理论上这样可以成功解决问题,但是经过测试,问题仍然存在

我以为是设置没有成功,就换官方镜像,用加 --skip-name-resolve 参数启动的方式尝试

结果依然没有成功

3.解决方式

就在我想要放弃将MySQL和程序用Docker打包起来时

突然想到,我连接使用的主机名都是 localhost ,是不是有可能是因为这个造成的问题

秉持着死马当活马医的心态,我把Navicat的 localhost 换成了127.0.0.1

点击“测试连接”,竟然成功的秒连了

至此,问题解决

4.总结

这就是个由于DNS解析造成的问题,如果设置 skip-name-resolve 无效

就像我一样尝试一下改成 127.0.0.1 ,可能就解决了

5.参考资料

Docker中Mysql连接很慢问题解决_docker mysql连接很慢-CSDN博客

Docker:MySQL连接慢问题解决_centos7 docker 安装mysql8很慢-CSDN博客

【Docker】Mysql连接很慢 (jhlwwz.com)