从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.exe
search“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:
- 默认:
c:\cygwin\bin\mintty.exe
- 基本:
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中运行。
- 在桌面上为cmd.exe创build快捷方式。
- 打开快捷方式的属性,并将启动目录更改为cygwin bin目录(通常为C:\ cygwin \ bin)。
- 将“/ c bash.exe”添加到目标参数中命令的末尾。
这将在Windows cmd.exe环境下运行bash,当您尝试运行mysql时,它将按照您的预期执行。 这是在Windows 7下工作,但尚未经过任何其他版本的testing。
- 将cygwin bin目录放在path envvariables中。
- 使用命令窗口运行cmd
- 在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更强大的接口/定制。 我非常喜欢透明度和颜色映射选项。
做这个:
- 只需从C:\ Program Files \ MySQL \ MySQL Server 5.5 \ bin复制ur mysql.exe即可
- 将这个mysql.exe粘贴到C:\ cygwin \ usr \ local \ bin中
- 现在运行哪个mysql,它会的
Althoug Svend Hansen的答案有一些观点,另一件事是环境variables中的PATH – 如果mysql的path在cygwin之前
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。
- 下载Cygwin
-
安装mysql客户端应用程序
-
在.bashrc文件中创build一个别名
别名mysql ='mysql -h 127.0.0.1'
- 执行源.bashrc
现在你可以连接到MySQL
mysql -u用户-p
重新安装cygwin和在重新安装search包中的mysql,安装mysql客户端,然后它会正常工作。