与在docker中运行的mysql连接缓慢
我为mysql安装了一个docker镜像。
docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD="Foo" -e DB_REMOTE_ROOT_NAME=root -e DB_REMOTE_ROOT_PASS="foo" -e DB_USER=foo -e DB_PASS="foo" -e DB_NAME=foo -v /:/host -v /home/user1/data/mysql:/var/lib/mysql mysql:latest
一切都很好,我可以通过两种方式连接到MySQL
docker exec -it mysql bash mysql -ufoo -pfoo foo
并从我的Mac控制台(无docker执行)
mysql -ufoo -pfoo -h0.0.0.0 foo
我看到的问题是,第二种方法需要很长时间来连接。 它连接成功,但有一个15至20秒的延迟。
而在docker执行它瞬间连接。
为什么有一个延迟,当我从我的Macterminal直接使用MySQL而不是第一个SSH连接到盒子?
我试图用localhostreplace0.0.0.0。 但后来我得到一个错误
mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
编辑::
我尝试了以下,并没有真正的作品
mysql -ufoo -pbar -h1x.1x.5x.14x foo mysql -ufoo -pbar -h127.0.0.1 foo mysql -ufoo -pbar -hmysql.local foo
以上所有3个都有10秒的延迟
但是,如果我这样做
docker exec -it mysql bash mysql -ufoo -pbar foo
这是毫不迟疑的瞬间
你为什么使用0.0.0.0? 它可能是,它试图首先使用套接字连接,由于本地主机绑定(MySQL客户端行为)。
- 如果您使用docker-for-mac,请尝试localhost / 127.0.0.1
- 尝试把
127.0.0.1 test.local
这样的东西放到你的/etc/hosts
文件中,并使用-htest.local
– 连接速度是否更快? - 你的mysql容器使用“dnsparsing”吗? 在/etc/mysql/my.ini中使用skip-name-resolve会更快吗? (可能与a也有关)如果与a没有关系,检查mysql容器是否有坏的DNS