【发布时间】:2014-07-04 06:15:16
【问题描述】:
我正在尝试通过 mysql 代理使用 LuaSql 连接到 mysql 服务器。我尝试执行一个简单的程序(db.lua):
require("luasql.mysql")
local _sqlEnv = assert(luasql.mysql())
local _con = nil
function read_auth(auth)
local host, port = string.match(proxy.backends[1].address, "(.*):(.*)")
_con = assert(_sqlEnv:connect( "db_name", "username", "password", "hostname", "3306"))
end
function disconnect_client()
assert(_con:close())
end
function read_query(packet)
local cur = con:execute("select * from t1")
myTable = {}
row = cur:fetch(myTable, "a")
print(myTable.id,myTable.user)
end
当我在没有mysql-proxy 的情况下执行此代码时,它执行得很好。当我使用 mysql-proxy 连接时,错误日志显示以下错误:
mysql.lua:8: 'insert' 的参数 #1 错误(应为表,结果为零) db.lua:1: loop or previous error loading module 'luasql.mysql'
mysql.lua 是 LuaSql 的默认文件:
---------------------------------------------------------------------
-- MySQL specific tests and configurations.
-- $Id: mysql.lua,v 1.4 2006/01/25 20:28:30 tomas Exp $
---------------------------------------------------------------------
QUERYING_STRING_TYPE_NAME = "binary(65535)"
table.insert (CUR_METHODS, "numrows")
table.insert (EXTENSIONS, numrows)
---------------------------------------------------------------------
-- Build SQL command to create the test table.
---------------------------------------------------------------------
local _define_table = define_table
function define_table (n)
return _define_table(n) .. " TYPE = InnoDB;"
end
---------------------------------------------------------------------
-- MySQL versions 4.0.x do not implement rollback.
---------------------------------------------------------------------
local _rollback = rollback
function rollback ()
if luasql._MYSQLVERSION and string.sub(luasql._MYSQLVERSION, 1, 3) == "4.0" then
io.write("skipping rollback test (mysql version 4.0.x)")
return
else
_rollback ()
end
end
【问题讨论】:
-
这是什么意思:“与 mysql-proxy 连接”?这是一个模块吗?剧本?你是怎么用的?
-
@Schollii 这是我在 mysql 代理的 mysql-proxy.cnf 文件中指定的 lua 脚本(db.lua)。我通过 mysql 代理使用它从 mysql-proxy 访问 mysql 服务器。 .我清楚了吗?
-
基于mysql-proxy docs 和您发布的代码,我猜您正在尝试编写mysql-proxy 脚本,而不是通过mysql 代理连接到mys1l 服务器。在那种情况下,“当我在没有 myql-proxy 的情况下执行它们时执行得很好”是什么意思。您得到的错误意味着代理没有创建 CUR_METHODS 表。是什么让您认为允许从代理内部创建数据库连接?
-
@Schollii 我的意思是“当我在没有 myql-proxy 的情况下执行它们时执行良好”是我可以使用 LuaSql 连接到 mysql 数据库,但我无法使用 mysql-proxy 连接相同的数据库。是可以通过 mysql-proxy 连接 mysql 服务器吗? P.S:现在我对代码做了一些更改..所以请现在检查一下
-
@Schollii 我还有一个疑问是否可以通过 mysql 代理使用 luasql 脚本?
标签: mysql lua mysql-proxy luasql