Windows下使用Cygwin编译MySQL客户端
MinTTY是一个小巧但却很实用的Cygwin终端机,但有个严重的问题就是无法调用交互性的Windows原生程序,比如说mysql.exe,当你在MinTTY中输入如下的命令:
$mysql-uroot-p
本来mysql.exe会提示输入密码,但在MinTTY中程序会直接挂起,不再响应,实际上即使在-p参数后面跟上密码,也是一样的。
某些程序,比如python,会提供参数-i,使自身在终端中进入交互模式,可惜并非所有的程序都有这样的参数。
解决的办法,使用Cygwin版本的MySQL客户端,但Cygwin并没有提供,所以就只有自己动手编译一个!
在http://dev.mysql.com/downloads下载源码包并解压。
$wgethttp://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.0-m2.tar.gz/from/...... $tarzxvfmysql-5.5.0-m2.tar.gz $cdmysql-5.5.0-m2
在动手编译之前,先打开Cygwin安装程序安装readline,用来替代MySQL自带的。MySQL源码包捆绑的readline在Cygwin中编译会报错。
准备好以后,开始编译过程:
$./configure--without-server--without-readlineCFLAGS=-O2CXXFLAGS=-O2 $make $makeinstall
Cygwin的编译速度是很慢的,和原生*nix系统完全没法比,所以如果不是闲到发慌,最好不要去编译“复杂”的MySQLServer。
编译安装完MySQLClient,打开Windows系统中的MySQLServer,使用如下的命令测试一下:
$mysql-h127.0.0.1-uroot-p
为什么加上-h127.0.0.1呢?默认的情况下,不带-h参数或者使用-hlocalhost,MySQL都会使用Unixsocketfile连接服务器,即使你在命令中指定了端口也会被忽略的,所以肯定连接不上的,提示找不到/tmp/mysql.sock。使用IP或者主机名后,MySQL就会使用TCP/IP模式连接服务器的3306端口,这样就什么没问题了。
为了方便,在配置文件中强制客户端使用TCP/IP连接模式。
复制mysql-5.5.0-m2/support-files中的配置文件样板到/etc/my.cnf,EG:
$cpsupport-files/my-medium.cnf/etc/my.cnf
在[client]中加入protocol=TCP,EG:
#ThefollowingoptionswillbepassedtoallMySQLclients [client] #password =your_password port =3306 socket =/tmp/mysql.sock protocol =TCP ##指定客户端连接的默认编码,注意是utf8,不是utf-8 ##可根据需要自行修改 default-character-set=utf8
之后就可以使用mysql-uroot-p直接连接Windows中的MySQLServer了。
令人纠结的乱码问题
顺便提一下,MySQL中大部分人都是使用的UTF-8编码,我也是。为了规避乱码,需要在Cygwin/MinTTY中把字符集设置为UTF-8,不过让人极度不爽的是,这样的话,中文Windows的程序,就会乱码(比如ping,tracert,nslookup….),因为中文Windows环境使用的是GBK字符集,没办法,要么换成E文Windows,要么忍着。