我可以使用host=127.0.0.1
连接到MySQL数据库:
>> require 'dbi'
=> true
>> DBI.connect("DBI:Mysql:host=127.0.0.1;port=3306", "root", "password")
=> #<DBI::DatabaseHandle:0x2ae4378 @handle=#<DBI::DBD::Mysql::Database:0x2ae44f8
@handle=#<Mysql:0x2ae4600>, @attr={"AutoCommit"=>true}, @have_transactions=true
, @mutex=#<Mutex:0x2ae4390>>, @trace_output=nil, @trace_mode=nil, @convert_types
=true, @driver_name="Mysql">
但是当我尝试用host=localhost
连接相同的数据库服务器时,它给了我错误:
>> DBI.connect("DBI:Mysql:host=localhost;port=3306", "root", "password")
DBI::DatabaseError: Can't connect to MySQL server on 'localhost' (10061)
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/dbd-mysql-0.4.4/lib/dbd/Mysql.r
b:106:in `error'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/dbd-mysql-0.4.4/lib/dbd/mysql/d
river.rb:70:in `rescue in connect'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/dbd-mysql-0.4.4/lib/dbd/mysql/d
river.rb:32:in `connect'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/dbi-0.4.5/lib/dbi/handles/drive
r.rb:33:in `connect'
from C:/Ruby193/lib/ruby/gems/1.9.1/gems/dbi-0.4.5/lib/dbi.rb:148:in `co
nnect'
from (irb):2
from C:/Ruby193/bin/irb:12:in `<main>'
那么它不起作用的原因是什么,我应该检查主机选项中是否提供了localhost,它应该转换为127.0.0.1然后连接到数据库..
答案 0 :(得分:0)
您使用的是IPV6吗?在这些机器上,localhost解析为:: 1
执行“ping localhost”以查看到底发生了什么。
看起来,当您指定“localhost”时,库正在尝试使用本地套接字
根据一些文档 插座=路径名 Unix套接字文件的路径名,用于localhost连接。所以看起来你需要添加套接字的路径