我为 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
Run Code Online (Sandbox Code Playgroud)
一切都很好,我可以通过两种方式连接到mysql
docker exec -it mysql bash
mysql -ufoo -pfoo foo
Run Code Online (Sandbox Code Playgroud)
以及我的 mac 控制台(没有 docker exec -it)
mysql -ufoo -pfoo -h0.0.0.0 foo
Run Code Online (Sandbox Code Playgroud)
我看到的问题是第二种方法需要很长时间才能连接。连接成功,但有 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)
Run Code Online (Sandbox Code Playgroud)
编辑::
我尝试了以下方法,但没有任何效果
mysql -ufoo -pbar -h1x.1x.5x.14x foo
mysql -ufoo -pbar -h127.0.0.1 foo
mysql -ufoo -pbar -hmysql.local foo
Run Code Online (Sandbox Code Playgroud)
以上 3 个都有 10 秒延迟
但如果我这样做
docker exec -it mysql bash
mysql -ufoo -pbar foo
Run Code Online (Sandbox Code Playgroud)
这是即时的,没有延迟
我在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
Run Code Online (Sandbox Code Playgroud)
你为什么使用0.0.0.0?由于本地主机绑定(mysql 客户端行为),它可能首先尝试使用套接字进行连接。
127.0.0.1 test.local
放入您的/etc/hosts
文件中并使用-htest.local
- 这样连接速度更快吗? 归档时间: |
|
查看次数: |
4350 次 |
最近记录: |