#mysql #lua #mysql-proxy #luasql
#mysql #lua #mysql-прокси #luasql
Вопрос:
Я пытаюсь подключиться к серверу 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: неверный аргумент # 1 для ‘insert’ (ожидаемая таблица, получено nil) db.lua:1: цикл или предыдущая ошибка модуля загрузки ‘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
Комментарии:
1. Что это значит: «подключение с помощью mysql-proxy»? Это модуль? Скрипт? Как вы это используете?
2. @Schollii это скрипт lua (db.lua), который я указываю в моем файле mysql-proxy.cnf прокси mysql. Я использую его через прокси mysql для доступа к серверу mysql с mysql-proxy.. Я ясно выразился?
3. Основываясь на документах mysql-proxy и опубликованном вами коде, я предполагаю, что вы пытаетесь создать скрипт mysql-proxy, а не подключаться к серверу mys1l через прокси mysql. В таком случае, что вы подразумеваете под «выполняется хорошо, когда я выполняю их без myql-proxy». Ошибка, которую вы получаете, означает, что прокси не создает таблицу CUR_METHODS. Что заставляет вас думать, что создание подключения к БД из прокси разрешено?
4. @Schollii Что я имею в виду под «хорошо выполняется, когда я выполняю их без myql-proxy», так это то, что я могу подключиться к базе данных mysql с помощью LuaSQL, но я не могу подключить то же самое с mysql-proxy. Возможно ли подключить сервер mysql через mysql-proxy? P.S: Теперь я внес некоторые изменения в code..So пожалуйста, проверьте это сейчас
5. @Schollii у меня также есть другое сомнение, возможно ли использовать скрипт luasql через прокси mysql?
Ответ №1:
Как указано в моем предыдущем комментарии, ошибка указывает на то, что table.insert (CUR_METHODS, ...)
в качестве первого аргумента получает nil. Поскольку первым аргументом является CUR_METHODS
, это означает, что этот объект CUR_METHODS
еще не определен. Поскольку это происходит в верхней части luasql.mysql
модуля, я предполагаю, что luasql
инициализация была неполной, возможно, потому, что библиотека DLL mysql не была найдена. Я предполагаю, что LUA_CPATH
не находит MySQL DLL для luasql, но я удивлен, что вы не получили ошибку пакета, так что происходит что-то странное. Вам придется покопаться в luasql
модуле и файле C, чтобы выяснить, почему он не создается.
Обновление: альтернативно, обновите свой post, чтобы показать выходные данные print("LUA path:", package.path)
и print("LUA path:", package.cpath)
из вашего скрипта mysql-proxy, а также показать путь к папке, где установлен luasql, и содержимое этой папки.
Комментарии:
1. но mysql.so присутствует в определенном. Я указал этот путь в mysql-proxy.cnf для LUA_CPATH. Но все та же ошибка.
2. @robin вы приняли этот ответ, но ваш последний комментарий указывает на все еще проблему, можете ли вы уточнить, каков фактический статус?
3. состояние таково, что та же ошибка сохраняется даже после изменения LUA_CPATH.
4. я понял, что фактическая ошибка заключается во включении правильного LUA_CPATH в конфигурационный файл mysql-proxy. Теперь это работает хорошо 🙂 Спасибо за вашу помощь.