我为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 exec -it)
mysql -ufoo -pfoo -h0.0.0.0 foo
我看到的问题是第二种方法需要很长时间才能连接。它连接成功,但延迟时间为15到20秒。
而在docker exec中,它会立即连接。
为什么我使用mysql而不是第一个SSH直接从我的mac终端连接进入盒子时有延迟?
我尝试用localhost替换0.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.0.0?可能是,由于localhost-binding(mysql-client behavior),它首先尝试使用套接字进行连接。
127.0.0.1 test.local
之类的内容放入/etc/hosts
文件中并使用-htest.local
- 这样可以更快地连接吗?答案 1 :(得分:0)
我在centos linux上遇到了这个问题。该问题似乎与名称解析有关。我通过添加mysql标志--skip-name-resolve
解决了我的问题。就我而言,它将连接时间从〜20秒减少到不到1秒。
根据您的命令行,我认为这应该可行:
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 --skip-name-resolve