情况是这样的,我以前没有用erlang连接过mysql,最近做的东西需要用到mysql,但我最近在用的时候出现一些问题,如下:
E:\Program Files3\erl5.6.5\lib\erlyweb-0.7.1\test>erl
Eshell V5.6.5 (abort with ^G)
1> erlydb:start(mysql, [{hostname, "localhost"}, {username, "root"}, {password,
"sa"}, {database, "test"}]).=INFO REPORT==== 29-Jun-2010::22:38:11 ===
application: crypto
exited: {shutdown,{crypto_app,start,[normal,[]]}}
type: temporary
mysql_conn:620: greeting version "5.0.41-community-nt" (protocol 10) salt "W1--8
s^[" caps 41516 serverchar <<48,2,0,0,0,0,0,
0,0,0,0,
0,0,0,0,
0>>salt2 ",jSA,UJSB0iB"
=ERROR REPORT==== 29-Jun-2010::22:38:12 ===
Error in process <0.37.0> with exit value: {badarg,[{erlang,port_control,[crypto
_drv02,5,"sa"]},{crypto,control,2},{mysql_auth,password_new,2},{mysql_auth,do_ne
w_auth,8},{mysql_conn,mysql_init,5},{mysql_conn,init,9}]}mysql:502: failed starting first MySQL connection handler, exiting
这儿我犯了一个毛病,不会看错误信息,上面的错误信息已经明确告诉你出错的模块,本题为例
exited: {shutdown,{crypto_app,start,[normal,[]]}}
说明本程序在调用模块crypto_app的start函数时出错,我不会看这个,还傻傻的一点点的看源码,想一点点的找到出错的地方,呵(有点可笑)
注意:在这之前要先确定你的erlang和mysql都没有问题,方法下:
mysql验证方法:
C:\Users\Administrator>mysql -u root -psa
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.41-community-nt MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
erlang验证方法
C:\Users\Administrator>erl
Eshell V5.6.5 (abort with ^G)
1>
确定没问题后开始对模块crypto_app进行测试。这时可以一点点往下找,不过最方便的方法是直接查找
“application: crypto
type: temporary
”
找到如下两个网址:
http://code.google.com/p/scalaris/issues/detail?id=21
http://blog.syntaxvssemantics.com/2010/02/getting-erlang-crypto-to-work-on.html
(这个里面的答案不是我当时找的最接近的,记得到时找到一个教你一步步找错的,挺好!)
可以找到很接近正确答案的东西了,答案就是“ssl application 和 crypto application 都需要在 PATH 中找到 openssl 的 dll 文件。”
下载Win32OpenSSL-0_9_8o.exe(6.88M)或Win32OpenSSL-1_0_0a.exe
下载地址:http://www.slproweb.com/download/Win32OpenSSL-0_9_8o.exe
注意:在安装的时候,一定注意一点,如图:
如果先下面那个的话, 一定要注意装好后将其 bin 目录加入PATH 中(我就是选择了下面那个选项,而又没有把bin下加入到path下,导致了N天的抓狂)
这步完成后,一切就OK了,这时再测试一下,结果如下:
C:\Users\Administrator > erl
Eshell V5. 6.5 (abort with ^ G)
1 > erlydb:start(mysql, [{hostname, " localhost " }, {username, " root " }, {password, "
sa " }, {database, " test " }]).
mysql_conn: 620 : greeting version " 5.0.41-community-nt " (protocol 10 ) salt " 8!9=g
mof " caps 41516 serverchar <<48,2,0,
0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 ,
0 >> salt2 " 4lDM6e}bVexL "
mysql_auth: 187 : mysql_auth send packet 1 : << 5 , 162 , 0 , 0 , 64 , 66 , 15 , 0 , 8 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
114 , 111 , 111 , 116 , 0 , 20 , 54 , 239 , 170 ,
177 , 132 , 242 , 79 , 196 , 24 , 125 , 188 , 8 , 81 ,
43 , 86 , 197 , 57 , 142 , 107 , 10 >>
mysql_auth: 187 : mysql_auth send packet 3 : << 82 , 79 , 64 , 75 , 64 , 70 , 86 , 85 , 0 >>
mysql_conn: 426 : fetch << " use test " >> (id < 0.38 . 0 > )
ok
2 >
一切OK,太爽了,一周的晦气都消失了。分享一下,免的和我遇到一样错误的人再经历我一样的痛苦一周,哈哈
——2010-07-02 00:50 于福州