【问题标题】:Openresty LUA Mysql connection errorOpenresty LUA Mysql连接错误
【发布时间】:2026-02-24 11:25:01
【问题描述】:

我一直在使用 openresty lua 并尝试连接到在我的本地主机上运行的 mysql 数据库。但是,我无法连接到它,也无法调试它,因为 lua mysql 客户端没有提供有关错误的任何信息。

    --
-- Created by IntelliJ IDEA.
-- User: AGK
-- Date: 6/5/18
-- Time: 2:14 PM
-- To change this template use File | Settings | File Templates.
--

local mysql = require "resty.mysql"

local _M={}
function _M.connect()


local db, err = mysql:new()
if not db then
    ngx.say("failed to instantiate mysql: ", err)
    return
end

db:set_timeout(1000) -- 1 sec

-- or connect to a unix domain socket file listened
-- by a mysql server:
--     local ok, err, errcode, sqlstate =
--           db:connect{
--              path = "/path/to/mysql.sock",
--              database = "ngx_test",
--              user = "ngx_test",
--              password = "ngx_test" }

local ok, err, errcode, sqlstate = db:connect{
    host = "127.0.0.1",
    port = 3306,
    database = "mydb",
    user = "root",
    password = "abcd1234",
    charset = "utf8",
    max_packet_size = 1024 * 1024,
    ssl = true,
    sslverify = true,
}

if not ok then
    ngx.say("failed to connect: ", err, ": ", errcode, " ", sqlstate)
    return
end

ngx.say("connected to mysql.")
end

return _M

此输出连接失败:连接失败:连接被拒绝:nil nil

知道这个简单的程序可能有什么问题。注意:我在我的 Mac 上运行 mysql 5.7.x。

【问题讨论】:

  • 你是否在同一个机器上运行 Openresty 和 MySQL 服务器?
  • @AlexanderAltshuler 是的,我在同一个盒子上运行它们。
  • 你可以看到 MySQL 正在监听 3306 端口? sudo netstat -tlpn请提供输出
  • @Alexander Altshuler 是的,我愿意。我什至使用 Java 代码连接到数据库。令人沮丧的部分是 lua 我的 sql lib 没有给我任何错误,它只是给出连接被拒绝和错误代码为零
  • 你可以在容器中运行 Openresty 吗?

标签: nginx lua openresty


【解决方案1】:

如果您在 docker 容器中运行 - 不要连接到 127.0.0.1

取决于您如何运行 MySQL,我们可能需要不同的解决方案。 我想你也可以在容器中运行 MySQL。

以这种方式为两个容器配置 Docker 网络,以便 MySQL 容器可以通过某个名称可见。

通常我为此目的创建命名的用户定义网络。

【讨论】: