我已经被这个问题困扰了一年多了,它真的让我头疼。
我经常遇到无法通过 SequelPRO 连接到 MySQL 服务器的情况。如果我通过 ssh 进入服务器,我可以正常使用 mysql、查看进程等。我的 Web 应用程序也可以正常工作。
当我尝试通过 Sequel PRO 通过 SSH 进入我的 MySQL 数据库时,立即出现以下消息:
无法连接到主机 127.0.0.1,或者请求超时。请确保地址正确并且您具有必要的权限,或者尝试增加连接超时(当前为 10 秒)。MySQL 表示:在“读取初始通信包”时与 MySQL 服务器失去连接,系统错误:0
唯一的解决办法是重启服务器。有时我会重启服务器,但仍然无法工作。重启几次后就可以工作了。但通常每次都能工作。
- 它发生在我所有不同的 Forge 服务器(php5 和 php7)上,并且从第一天起就发生了。
- 重新启动 mysql 服务器(如 sudo service restart mysql)不起作用
- 它发生在不同的网络上(wifi,本地等)
- 我可以使用不同的 SSH 密钥(相同的 OSX 和 Sequel Pro 版本)从另一台 Mac 顺利连接。我甚至尝试将自己的 SSH 密钥复制到另一台计算机,然后通过该计算机登录。这样也可以正常工作。
- 这种情况有时会发生,通常是在我的 Mac 进入睡眠状态时打开了 Sequel Pro(但并非总是如此 - 有时我可以在 24 小时后打开它,并且仍然可以连接)。但突然间,我断开了连接,当我再次尝试登录时,它会看到以下错误:
- 在某些情况下,即使我没有执行任何操作(即重新启动服务器),我也可以通过 sequel pro 再次登录 MySQL。
我的连接方式:
MySQL 主机:127.0.0.1 用户名:某某 密码:某某 端口:3306 SSH 主机:server-ip SSH 用户:某某 SSH 密钥:我的 id_rsa SSG 端口的路径:默认/未设置
有任何想法吗?
我的 Sequel Pro 版本:v1.1 build 4499 我的 OSX:OS X El Capitan v 10.11
服务器:Ubuntu 14.04.3 LTS(GNU/Linux 3.13.0-71-generic x86_64)
MySQL:Ver 14.14 Distrib 5.7.10,适用于 Linux (x86_64),使用 EditLine 包装器
答案1
看起来您在通过 SSH 连接或维护 SSH 隧道时遇到了问题,这些错误通常会报告给/var/log/auth.log
。SequelPRO 可能尝试使用不再可用的连接,因此停滞了。
您也可以尝试手动设置 SSH 隧道:http://www.sequelpro.com/docs/Set_up_an_SSH_Tunnel— 如果这有效,那么这肯定是 SequelPro SSH 连接的一个错误/问题。
答案2
提到 127.0.0.1 听起来你正在使用SSH 隧道SequelPro 的功能。
看如何可靠地保持 SSH 隧道畅通寻找该问题的解决方案。
如果下次发生此问题时,您断开与服务器的 SSH 会话,重新连接并且它正常工作,那么您可以确定此问题存在。
答案3
有点像是在黑暗中拍摄,但我以前见过这种情况并设法对其进行了调试。
但这确实是一个奇怪的极端情况。
如果您的时钟源设置为 jiffies,某些处理器将无法保持彼此同步,从而导致一个处理器上的时间与另一个处理器上的时间不同。 这可能只有 1 秒的差异,从而导致 mysql 出现问题。
您可以通过以下方式测试:
for i in $(seq 0 $(($(getconf _NPROCESSORS_ONLN)-1))); do taskset -c $i date & done
每行都应报告相同的结果,绝对不会有 1 秒的误差。您应该尝试几次,以确保测试期间不会超过 1 秒的阈值。
我在这里遇到的错误是,一个处理器比另一个处理器晚 1 秒。这导致 mysql 会询问时间,然后再次将时间与下一个新请求(相差 -1 秒)进行比较。鉴于这是意外情况,它会下溢,mysql 认为连接比实际时间早了 40 亿秒。
如果是这个问题的话,您应该将主机上的时钟源从 jiffies 改为tsc
,hpet
或者acpi
,问题就会消失。
答案4
设置你的 ~/.ssh/config 以包含“ForwardAgent yes”。另外grant all on db.* to 'user'@'127.0.0.1' identified by 'password'