与docker中运行的mysql的连接速度较慢
我为mysql安装了一个docker映像与docker中运行的mysql的连接速度较慢,mysql,docker,Mysql,Docker,我为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 mysq
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)
我看到的问题是,第二种方法需要很长时间才能连接。它成功连接,但有15到20秒的延迟
而在docker exec中,它是即时连接的
为什么当我直接使用mysql从mac终端连接时会出现延迟,而不是首先使用SSH连接到机箱中
我试图用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?由于本地主机绑定(mysql客户端行为),它可能首先尝试使用套接字进行连接
127.0.0.1 test.local
的内容放入您的/etc/hosts
文件中,然后使用-htest.local
-这是否连接得更快我在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
如果我用localhost替换0.0.0.0。然后我得到一个错误
mysql:[警告]在命令行界面上使用密码可能不安全。错误2002(HY000):无法通过套接字'/tmp/MySQL.sock'(2)连接到本地MySQL服务器。
您正在使用docker for mac吗?或者dockertoolbox?macwell最新的docker,这意味着,如果您使用localhost,mysql客户端将尝试使用套接字。请添加hosts条目,如我所说,127.0.0.1 mysql.local
到/etc/hosts/
,然后用mysql-ufoo-pfoo-hmysql.local
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