使用 tsql 连接到 tdsool 超时
connection to tdsool times out with tsql
我们正在使用 tdspool 并尝试在同一台机器上本地使用 tsql 连接到它。 tdspool 似乎可以很好地打开它的连接并开始监听,但是任何连接到池的客户端都会超时。
pool.conf
[global]
min pool conn = 5
max pool conn = 10
max member age = 120
[sampool]
user = [REDACTED]
password = [REDACTED]
database = [REDACTED]
server = [REDACTED]
port = 1313 ;change to a non standard port so we can see the connection details in the debug log
当使用 tsql 连接到 127.0.0.1:1313 时,tdspool 输出仅显示 "accepting connection",仅此而已。 freetds.log 输出以下内容:
dblib.c:1237:tdsdbopen: Calling tds_connect_and_login(0x2b3fec0, 0x2b40580)
iconv.c:328:tds_iconv_open(0x2b3fec0, UTF-8)
iconv.c:187:local name for ISO-8859-1 is ISO-8859-1
iconv.c:187:local name for UTF-8 is UTF-8
iconv.c:187:local name for UCS-2LE is UCS-2LE
iconv.c:187:local name for UCS-2BE is UCS-2BE
iconv.c:346:setting up conversions for client charset "UTF-8"
iconv.c:348:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:395:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:400:tds_iconv_open: done
net.c:202:Connecting to 127.0.0.1 port 1313 (TDS version 7.3)
net.c:274:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:313:tds_open_socket() succeeded
util.c:165:Changed query state from DEAD to IDLE
packet.c:740:Sending packet
0000 12 01 00 3a 00 00 00 00-00 00 1a 00 06 01 00 20 |...:.... ....... |
0010 00 01 02 00 21 00 0c 03-00 2d 00 04 04 00 31 00 |....!... .-....1.|
0020 01 ff 09 00 00 00 00 00-02 4d 53 53 51 4c 53 65 |........ .MSSQLSe|
0030 72 76 65 72 00 96 24 00-00 00 |rver..$. ..|
util.c:322:tdserror(0x2a6b8c0, 0x2b3fec0, 20003, 115)
dblib.c:7897:dbperror(0x2b3f3b0, 20003, 115)
dblib.c:7965:dbperror: Calling dblib_err_handler with msgno = 20003; msg->msgtext = "Adaptive Server connection timed out (127.0.0.1:1313)"
dblib.c:5743:dbgetuserdata(0x2b3f3b0)
dblib.c:7987:dbperror: dblib_err_handler for msgno = 20003; msg->msgtext = "Adaptive Server connection timed out (127.0.0.1:1313)" -- returns 2 (INT_CANCEL)
util.c:352:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:375:tdserror: returning TDS_INT_CANCEL(2)
query.c:3769:tds_disconnect()
util.c:165:Changed query state from IDLE to DEAD
login.c:472:login packet rejected
util.c:322:tdserror(0x2a6b8c0, 0x2b3fec0, 20002, 0)
dblib.c:7897:dbperror(0x2b3f3b0, 20002, 0)
dblib.c:7965:dbperror: Calling dblib_err_handler with msgno = 20002; msg->msgtext = "Adaptive Server connection failed (127.0.0.1:1313)"
dblib.c:5743:dbgetuserdata(0x2b3f3b0)
dblib.c:7987:dbperror: dblib_err_handler for msgno = 20002; msg->msgtext = "Adaptive Server connection failed (127.0.0.1:1313)" -- returns 2 (INT_CANCEL)
util.c:352:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:375:tdserror: returning TDS_INT_CANCEL(2)
dblib.c:1241:tdsdbopen: tds_connect_and_login failed for "127.0.0.1:1313"!
dblib.c:1463:dbclose(0x2b3f3b0)
dblib.c:243:dblib_del_connection(0x7fa27f9644a0, 0x2b3fec0)
mem.c:648:tds_free_all_results()
dblib.c:290:dblib_release_tds_ctx(1)
dblib.c:5845:dbfreebuf(0x2b3f3b0)
dblib.c:743:dbloginfree(0x2b3ef10)
dblib.c:1533:dbexit(void)
dblib.c:1533:dbexit(void)
dblib.c:290:dblib_release_tds_ctx(1)
tsql -C:
Version: freetds v0.95.19
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: no
OpenSSL: no
GnuTLS: no
OS: 美分OS 6.5
我有类似的问题。会尽力帮你解决你的。首先,确保您的 /etc/freetds.conf 包含有效配置:
[global]
tds version = 4.2
...
[myserver]
host = <ip>
port = 1433
tds version = 4.2 < this is important
现在,/etc/tdspool.conf
[sampool]
user = [REDACTED]
password = [REDACTED]
database = [REDACTED]
server = myserver < important
port = 1313
然后 tdspool sampool 应该可以正常启动了。我的错误如下:
1. 我认为 pool.conf 中的服务器是服务器的 ip 或域名,而实际上那是对 freetds.conf 中服务器的引用
2. 在 freetds.conf 中我使用了错误的(太高的)tds 版本。 Tdspool 支持高达 4.2 的 tds 版本,如其文档中所述。
现在,如果您尝试通过 tsql -S 172.0.0.1:1313 连接,您仍然会永远得到 "accepting connection..."。但是,如果你这样做
tsql -S 127.0.0.1:1313 -U <username> -P <password> -D <database>
您将连接并能够通过 tdspool 对您的 sql 服务器进行 运行 查询。
软件有问题
我们去了官方邮件列表,逐字询问了这个问题。答案似乎是没有不重写当前项目的。
Client libraries are used and well tested but pool and server are
really not in a good shape.
The current state of tdspool is.... it compiles! I'm not surprised it
does not run correctly.
That said it's open source. Any help/suggestion/patch is welcome.
我们花了相当多的时间试图找出我们做错了什么,所以这有点痛苦。虽然我会寻找 make/modify 现有的 SQL 服务器池,但令我失望的是 FreeTDS(一个很棒的项目)附带如此不稳定的池
我们正在使用 tdspool 并尝试在同一台机器上本地使用 tsql 连接到它。 tdspool 似乎可以很好地打开它的连接并开始监听,但是任何连接到池的客户端都会超时。
pool.conf
[global]
min pool conn = 5
max pool conn = 10
max member age = 120
[sampool]
user = [REDACTED]
password = [REDACTED]
database = [REDACTED]
server = [REDACTED]
port = 1313 ;change to a non standard port so we can see the connection details in the debug log
当使用 tsql 连接到 127.0.0.1:1313 时,tdspool 输出仅显示 "accepting connection",仅此而已。 freetds.log 输出以下内容:
dblib.c:1237:tdsdbopen: Calling tds_connect_and_login(0x2b3fec0, 0x2b40580)
iconv.c:328:tds_iconv_open(0x2b3fec0, UTF-8)
iconv.c:187:local name for ISO-8859-1 is ISO-8859-1
iconv.c:187:local name for UTF-8 is UTF-8
iconv.c:187:local name for UCS-2LE is UCS-2LE
iconv.c:187:local name for UCS-2BE is UCS-2BE
iconv.c:346:setting up conversions for client charset "UTF-8"
iconv.c:348:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:395:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:400:tds_iconv_open: done
net.c:202:Connecting to 127.0.0.1 port 1313 (TDS version 7.3)
net.c:274:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:313:tds_open_socket() succeeded
util.c:165:Changed query state from DEAD to IDLE
packet.c:740:Sending packet
0000 12 01 00 3a 00 00 00 00-00 00 1a 00 06 01 00 20 |...:.... ....... |
0010 00 01 02 00 21 00 0c 03-00 2d 00 04 04 00 31 00 |....!... .-....1.|
0020 01 ff 09 00 00 00 00 00-02 4d 53 53 51 4c 53 65 |........ .MSSQLSe|
0030 72 76 65 72 00 96 24 00-00 00 |rver..$. ..|
util.c:322:tdserror(0x2a6b8c0, 0x2b3fec0, 20003, 115)
dblib.c:7897:dbperror(0x2b3f3b0, 20003, 115)
dblib.c:7965:dbperror: Calling dblib_err_handler with msgno = 20003; msg->msgtext = "Adaptive Server connection timed out (127.0.0.1:1313)"
dblib.c:5743:dbgetuserdata(0x2b3f3b0)
dblib.c:7987:dbperror: dblib_err_handler for msgno = 20003; msg->msgtext = "Adaptive Server connection timed out (127.0.0.1:1313)" -- returns 2 (INT_CANCEL)
util.c:352:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:375:tdserror: returning TDS_INT_CANCEL(2)
query.c:3769:tds_disconnect()
util.c:165:Changed query state from IDLE to DEAD
login.c:472:login packet rejected
util.c:322:tdserror(0x2a6b8c0, 0x2b3fec0, 20002, 0)
dblib.c:7897:dbperror(0x2b3f3b0, 20002, 0)
dblib.c:7965:dbperror: Calling dblib_err_handler with msgno = 20002; msg->msgtext = "Adaptive Server connection failed (127.0.0.1:1313)"
dblib.c:5743:dbgetuserdata(0x2b3f3b0)
dblib.c:7987:dbperror: dblib_err_handler for msgno = 20002; msg->msgtext = "Adaptive Server connection failed (127.0.0.1:1313)" -- returns 2 (INT_CANCEL)
util.c:352:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:375:tdserror: returning TDS_INT_CANCEL(2)
dblib.c:1241:tdsdbopen: tds_connect_and_login failed for "127.0.0.1:1313"!
dblib.c:1463:dbclose(0x2b3f3b0)
dblib.c:243:dblib_del_connection(0x7fa27f9644a0, 0x2b3fec0)
mem.c:648:tds_free_all_results()
dblib.c:290:dblib_release_tds_ctx(1)
dblib.c:5845:dbfreebuf(0x2b3f3b0)
dblib.c:743:dbloginfree(0x2b3ef10)
dblib.c:1533:dbexit(void)
dblib.c:1533:dbexit(void)
dblib.c:290:dblib_release_tds_ctx(1)
tsql -C:
Version: freetds v0.95.19
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: no
OpenSSL: no
GnuTLS: no
OS: 美分OS 6.5
我有类似的问题。会尽力帮你解决你的。首先,确保您的 /etc/freetds.conf 包含有效配置:
[global]
tds version = 4.2
...
[myserver]
host = <ip>
port = 1433
tds version = 4.2 < this is important
现在,/etc/tdspool.conf
[sampool]
user = [REDACTED]
password = [REDACTED]
database = [REDACTED]
server = myserver < important
port = 1313
然后 tdspool sampool 应该可以正常启动了。我的错误如下: 1. 我认为 pool.conf 中的服务器是服务器的 ip 或域名,而实际上那是对 freetds.conf 中服务器的引用 2. 在 freetds.conf 中我使用了错误的(太高的)tds 版本。 Tdspool 支持高达 4.2 的 tds 版本,如其文档中所述。
现在,如果您尝试通过 tsql -S 172.0.0.1:1313 连接,您仍然会永远得到 "accepting connection..."。但是,如果你这样做
tsql -S 127.0.0.1:1313 -U <username> -P <password> -D <database>
您将连接并能够通过 tdspool 对您的 sql 服务器进行 运行 查询。
软件有问题
我们去了官方邮件列表,逐字询问了这个问题。答案似乎是没有不重写当前项目的。
Client libraries are used and well tested but pool and server are really not in a good shape.
The current state of tdspool is.... it compiles! I'm not surprised it does not run correctly.
That said it's open source. Any help/suggestion/patch is welcome.
我们花了相当多的时间试图找出我们做错了什么,所以这有点痛苦。虽然我会寻找 make/modify 现有的 SQL 服务器池,但令我失望的是 FreeTDS(一个很棒的项目)附带如此不稳定的池