Apache 2.4 - 无法使用 mod_lua、mod_dbd、freetds 获取 Sybase 数据库连接
我们正在将 Python 脚本迁移到 Lua 脚本中,这是 Apache 2.4 升级的一部分。其中的一项要求是连接到 Sybase 数据库并执行查询。 为此,我们使用 mod_lua api 开发了一小段代码来获取 db 连接,但并没有成功。
我们已经安装了 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
DBDMax 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)Internal error (specific information not available): AH00629: Can't connect to freetds:
[Thu Aug 25 15:28:03.198145 2016] [dbd:error] [pid 21708:tid 139621318366976] (20014)Internal error (specific information not available): AH00633: failed to initialise
[Thu Aug 25 15:28:03.198184 2016] [lua:error] [pid 21708:tid 139621318366976] [client 10.135.15.148:52836] inside handle method_1 Could not acquire connection from mod_dbd. If your database is running, this may indicate a permission problem.
我们能够使用相同的系统从 tsql 连接到数据库,但无法从 Apache 的 dbd 进行连接。 我们怀疑可能存在一些配置(DBDParams)问题,或者操作系统可能会阻止 Apache 的连接。
请有人在此方面提供帮助。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我们找到了解决方案。问题出现在我们传递的
DBDParams中。连接思百科时,我们在 'host' 参数中提供了连接详细信息(host:port)。进一步查看apr-util-freetds代码后,我们发现对于 Sybase 连接,应该在 **server**(server=) 参数中提供主机端口连接详细信息。http://www.freetds.org/reference/a00371.html#gaef0e7a5fcf2d8c8f795b2b06ce4de8b1
使用 freetds 连接思百科的 DBD 参数是 - DBDParams username=xxx,password=xxxxxx,server=h.o.s.t:port
这有点令人困惑,因为在 Sybase 术语中,主机通常是服务器主机名/ IP。