2

作为 apache 2.4 升级的一部分,我们正在将我们的 python 脚本迁移到 lua 脚本。其中一项要求是连接到 Sybase 数据库并执行查询。为此,我们使用 mod_lua api 开发了一个小代码来获取数据库连接,但我们没有成功。

我们已经用 freetds 安装了 apr-util。

要使用 mod_lua、mod_dbd 和 freetds 获取数据库连接 - 我们遵循此处提到的步骤 - http://modlua.org/api/database#dbd

要为 freetds 配置 DPDParams,我们遵循此处提到的参数 https://httpd.apache.org/docs/2.4/mod/mod_dbd.html#DBDParams

在 httpd.conf 的 VirtualHost 中,我们添加了以下 dbdparams

DBDriver freetds

DBDParams username=xxx,password=xxx,host=host-ip:port

DBD最大 10

和 lua 代码,仅用于获取数据库连接

require "apache2"
require "string"
function handle(r)
r.content_type = "text/html"
local database, err = r:dbacquire("mod_dbd")
r:err("inside handle method_1  " .. err)
return apache2.OK
end

我们在 apache 错误日志中得到的错误是 -

[Thu Aug 25 15:28:03.198044 2016] [dbd:error] [pid 21708:tid 139621318366976] (20014)内部错误(具体信息不可用):AH00629:无法连接到freetds:

[Thu Aug 25 15:28:03.198145 2016] [dbd:error] [pid 21708:tid 139621318366976] (20014)内部错误(具体信息不可用):AH00633:初始化失败

[Thu Aug 25 15:28:03.198184 2016] [lua:error] [pid 21708:tid 139621318366976] [client 10.135.15.148:52836] 内部句柄 method_1 无法从 mod_dbd 获取连接。如果您的数据库正在运行,这可能表明存在权限问题。

我们可以从同一系统使用 tsql 连接到数据库,但是从 apache dbd 的连接不起作用。 我们怀疑可能存在一些配置(DBDParams)问题,或者操作系统可能阻止来自 apache 的连接

有人可以在这方面提供帮助。

4

1 回答 1

0

我们找到了解决方案。问题出在我们传递的 DBDParams 中。为了连接到 sybase,我们在“主机”参数(主机 =)中提供了连接详细信息(主机:端口)。在进一步查看 apr-util-freetds 代码后,我们发现对于 Sybase 连接,它是 **server (server=) 参数,我们应该在其中提供主机端口连接详细信息**。

http://www.freetds.org/reference/a00371.html#gaef0e7a5fcf2d8c8f795b2b06ce4de8b1

使用 freetds 用于 Sybase 连接的 DBD 参数是 - DBDParams username=xxx,password=xxxxxx,server=host:port

它有点令人困惑,因为在 sybase 术语中主机通常是服务器主机名/IP。

于 2016-08-30T05:53:34.337 回答