从cygwin连接到mysql

我可以从DOS提示符成功连接到MySQL,但是当我尝试从cygwin连接时,它只是挂起。

$/cygdrive/c/Program\ Files/MySQL/MySQL\ Server\ 5.1/bin/mysql -u root -p 

怎么了?

假设你有一个本地的Windows版本的MySQL, DOS (命令提示符)窗口和bash之间存在terminal仿真不兼容。 mysql的提示符不显示。

要确认这一点,input一个命令并返回 – 它可能会工作,但命令的提示符和回显(正在input的内容)正在丢失。

CYGWIN系统属性或bash可能有一个解决方法,但我从来没有花时间去完成这一个。

我只是遇到了这个,当我读到某人提到它是在cygwin中运行的Windows / DOS命令时,我做了一个which mysql ,并且给了我:

 $ which mysql /cygdrive/c/Program Files/MySQL/MySQL Server 5.5/bin/mysql 

所以我跑了cygwin的Setup.exesearch“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 

到configuration文件。

我在这里发布了一个解决scheme/解决方法:

input密钥有时不能在Windows下的cygwin应用程序识别

其他答案缺乏以下关键细节:

Cygwin有两个shell:

  1. 默认: c:\cygwin\bin\mintty.exe
  2. 基本: c:\cygwin\Cygwin.bat (启动c:\cygwin\bin\bash.exe

Win32 MySQL可以正确写入#2,但不是 #1,因为Win32 MySQL无法正确探测stdin (谢谢@PeterNore)

想知道你是否使用Win32 MySQL? 使用which ,例如

 $ which mysql /cygdrive/c/Program Files/MySQL/MySQL Server 5.1/bin/mysql 

奖金 : Cygwin克服path问题的指导 ( 谢谢@Dustin )

从cmd.exe可执行文件运行bash,然后mysql将在bash中运行。

  1. 在桌面上为cmd.exe创build快捷方式。
  2. 打开快捷方式的属性,并将启动目录更改为cygwin bin目录(通常为C:\ cygwin \ bin)。
  3. 将“/ c bash.exe”添加到目标参数中命令的末尾。

这将在Windows cmd.exe环境下运行bash,当您尝试运行mysql时,它将按照您的预期执行。 这是在Windows 7下工作,但尚未经过任何其他版本的testing。

  1. 将cygwin bin目录放在path envvariables中。
  2. 使用命令窗口运行cmd
  3. 在cmd窗口中运行bash -l

然后,MySQL可以运行没有问题。

Svend Hansen的答案是正确的:

  • 安装windows的mysql服务器文件(例如从mysql-5.5.25-win32.msi)

  • 用cygwin安装程序(setup.exe)安装Cygwin mysql客户端

  • 用cygwin客户端“mysql -u [user] -p [Password] -h [host]”连接到你的服务器,在我的例子中是“mysql -uroot -pXXXX -h127.0.0.1”

我认为当问题发布时,cygwin安装程序没有提供mysql组件,现在已经解决了。

我已经创造了一个满足我的一个半固定。 我在cmd.exe中运行了cygwin.bat,然后inputmysql -in一切正常。

我在那里意识到问题是五十年代的。

容易解决? 下载Console2 ,在设置下你可以把它指向cygwin shell。 重新启动Console2,运行mysql并显示输出。

无论如何,这是有利的,因为Console2具有比Mintty更强大的接口/定制。 我非常喜欢透明度和颜色映射选项。

做这个:

  1. 只需从C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin复制ur mysql.exe即可
  2. 将这个mysql.exe粘贴到C:\ cygwin \ usr \ local \ bin中
  3. 现在运行哪个mysql,它会的

Althoug Svend Hansen的答案有一些观点,另一件事是环境variables中的PATH – 如果mysqlpathcygwin之前

 which mysql 

将会呈现

 /cygdrive/c/Program Files/MySQL/MySQL Server 5.5/bin/mysql 

否则会显示cygwin客户端。

参考维基百科说:

某些程序可能会在安装过程中将其目录添加到PATHvariables内容的前面 ,以加快search过程和/或覆盖OS命令。

免责声明:MinGW / MSYS下的MinTTY下面解决了这个问题。 从研究中,我相信这个同样的根本原因也影响Cygwin。

答案张贴在这里: https : //stackoverflow.com/a/23164362/1034436

简而言之,您需要在winpty的console.exe预先安装mysql命令(或者使用别名)。 这个解决scheme使用本地 Windows MySQL可执行文件,而不是一个特殊的cygwin / mingw版本。 但是,你必须编译winpty,但是这是简单而无痛的,并按照他们的文档为我工作。

注意:这也解决了我的问题与其他几个本地Windows控制台应用程序,即Python和Mercurial与OpenSSH。

  1. 下载Cygwin
  2. 安装mysql客户端应用程序

  3. 在.bashrc文件中创build一个别名

    别名mysql ='mysql -h 127.0.0.1'

  4. 执行源.bashrc

现在你可以连接到MySQL

mysql -u用户-p

重新安装cygwin和在重新安装search包中的mysql,安装mysql客户端,然后它会正常工作。