Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与docker中运行的mysql的连接速度较慢_Mysql_Docker - Fatal编程技术网

与docker中运行的mysql的连接速度较慢

与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

我为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)

我看到的问题是,第二种方法需要很长时间才能连接。它成功连接,但有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客户端行为),它可能首先尝试使用套接字进行连接

  • 如果您正在使用docker for mac,请尝试localhost/127.0.0.1
  • 尝试将类似于
    127.0.0.1 test.local
    的内容放入您的
    /etc/hosts
    文件中,然后使用
    -htest.local
    -这是否连接得更快
  • 您的mysql容器是否使用“dns解析”?在/etc/mysql/my.ini中使用跳过名称解析是否更快?(也可能与a相关)如果与a无关,请检查mysql容器是否有损坏的DNS

  • 我在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