我可以从 DOS 提示符成功连接到 MySQL,但是当我尝试从 cygwin 连接时,它只是挂起。
$/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.1/bin/mysql -u root -p
怎么了?
我刚遇到这个,当我读到有人提到它是你在 cygwin 中运行的 windows/DOS 命令时,我做了一个which mysql
,这给了我:
$ which mysql
/cygdrive/c/Program Files/MySQL/MySQL Server 5.5/bin/mysql
所以我运行 cygwinSetup.exe
搜索“mysql”并安装了最新的“mysql 客户端”。现在which mysql
看起来像:
$ which mysql
/usr/bin/mysql
MySQL 命令在 cygwin 中工作 :)
虽然这是一个老问题,但如果能在这里得到实际答案会很好,因为人们(比如我自己)可能仍然会偶然发现它。
如果您尝试从 Cygwin 运行 MySQL 客户端返回以下错误:
$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql.sock' (2)
-h 127.0.0.1
然后,您可以通过在命令行中添加显式选项来修复它,如下所示:
$ mysql -u root -p -h 127.0.0.1
基于评论的更新:
为避免-h 127.0.0.1
每次连接时都在命令行上指定,您可以添加:
[client]
host=127.0.0.1
到文件/etc/my.cnf
在 Cygwin 的某些安装中,指定主机-h
可能还不够。如果是这样,请尝试同时指定:
--protocol=tcp
或添加
protocol=tcp
到配置文件。
假设您有 MySQL 的本机 Windows 版本,DOS
(命令提示符)窗口和bash
. 提示mysql
没有出现。
要确认这一点,请键入命令并返回 - 它可能会起作用,但命令的提示符和回显(您正在输入的内容)会丢失。
CYGWIN
在sytem properties 或 in中可能有一种解决方法bash
,但我从来没有花时间解决这个问题。
其他答案缺少以下关键细节:
Cygwin 有两个 shell:
c:\cygwin\bin\mintty.exe
c:\cygwin\Cygwin.bat
启动c:\cygwin\bin\bash.exe
)Win32 MySQL 可以正确写入 #2,但不能正确写入#1,因为Win32 MySQL 无法正确探测标准输入(感谢@PeterNore)
想知道您是否在使用 Win32 MySQL?使用which
,例如
$ which mysql
/cygdrive/c/Program Files/MySQL/MySQL Server 5.1/bin/mysql
奖励: 克服路径问题的 Cygwin 指南 (感谢@Dustin)
我在这里发布了一个解决方案/解决方法:
从 cmd.exe 可执行文件运行 bash,然后 mysql 将在 bash 中运行。
这将在 windows cmd.exe 环境下运行 bash,当您尝试运行 mysql 时,它将按预期执行。这在 Windows 7 下工作,但尚未在任何其他版本中进行测试。
然后MySQL可以毫无问题地运行。
斯文德汉森的答案是正确的:
安装 windows mysql 服务器文件(例如从 mysql-5.5.25-win32.msi )
使用 cygwin 安装程序 (setup.exe) 安装 Cygwin mysql 客户端
使用 cygwin 客户端“mysql -u[user] -p[Password] -h[host]”在 cygwin 窗口中连接到您的服务器,在我的情况下为“mysql -uroot -pXXXX -h127.0.0.1”
我认为当问题发布时,cygwin设置没有提供mysql组件,现在已经解决了。
我为此创建了一个让我满意的半修复程序。我在 cmd.exe 中运行 cygwin.bat,然后输入 mysql - 一切正常。
我意识到问题很严重。
简单的解决方案?下载Console2,在设置下你可以将它指向 cygwin shell。重启Console2,运行mysql,出现输出。
无论如何,这是有利的,因为 Console2 具有比 Mintty 更强大的界面/定制。我真的很喜欢透明度和颜色映射选项。
做这个:
Althoug Svend Hansen 的回答有一些要点,另一件事是环境变量中的 PATH - 如果mysql 的路径在cygwin之前
which mysql
将会呈现
/cygdrive/c/Program Files/MySQL/MySQL Server 5.5/bin/mysql
否则它将显示 cygwin 客户端。
正如参考维基百科所说:
某些程序可能会在安装过程中将其目录添加到 PATH 变量内容的前面,以加快搜索过程和/或覆盖操作系统命令。
免责声明:以下在 MinGW/MSYS 上的 MinTTY 下为我解决了这个问题。根据研究,我相信同样的根本原因也会影响 Cygwin。
答案发布在这里:https ://stackoverflow.com/a/23164362/1034436
简而言之,您需要在mysql
命令前加上 winpty console.exe
(或使用别名)。该解决方案适用于本机Windows MySQL 可执行文件,而不是特殊的 cygwin/mingw 构建。但是,您必须编译 winpty,但这既简单又轻松,并且按照他们为我提供的文档工作。
注意:这也解决了我使用其他几个本机 Windows 控制台应用程序的问题,即 Python 和 Mercurial with OpenSSH。
安装 mysql 客户端应用程序
在 .bashrc 文件中创建别名
别名 mysql='mysql -h 127.0.0.1'
现在你可以连接到mysql了
mysql -u 用户 -p
重新安装cygwin并在重新安装期间在包中搜索mysql,安装mysql客户端,然后它就可以正常工作了。
今天发现这个问题 2018-03-18 寻找一些答案
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql.sock' (2 "No such file or directory")
该文件/etc/my.conf
引用了/etc/my.cnf.d
我将其添加到的配置文件/etc/my.cnf.d/client.cnf
:
[client]
host=127.0.0.1
protocol=tcp
之后,我可以使用 cygwin 终端访问本地 Windows MySQL 实例mysql -u root -p