Именно так, работало но сломалось. Правда, не совсем так.
Я упомянутый плагин нашел в сентябре прошлого года, удивился что плагин оказался рабочим (все предыдущие системы статистики на MySQL которые мне попадались имели серьезные проблемы и переделывать их было дольше чем бы написать с нуля). Поставил его сразу на 3 сервера.
Конфигурация:
Сервер 1 - Арена, MySQL там же Арена.
Сервер 2, 3 - свои VPS, MySQL - тоже свой VPS (другой), на нем одна база данных но разные таблицы.
Сегодня клонирую Сервер 3 на другой адрес и называю это Сервер 4. Архивировал, скопировал, разархивировал, запустил - все просто.
Далее клонировал 2 таблицы базы данных необходимых для работы статистики с другими именами и подправил имя таблицы в конфиге (структура правильная, новые таблицы пустые после TRUNCATE). Логин-пароль к базе тот же. Знаю что так делать нельзя но было лень создавать отдельного юзера с правами на эти таблицы.
Вижу ошибку из 1 поста в конце раунда когда должна происходить запись статистики согласно настройкам.
Квары доступа к БД проверил - значения правильные в консоли.
Подключений к базе перманентных нет (SHOW PROCESSLIST показывает пусто) но на Сервере 2 все идеально работает и данные пишутся - значит так задумано автором плагина, в принципе это правильно.
На всякий случай из консоли подключился к удаленной базе
Цитата
mysql -u user -h host -p
как бы все работает, подключение устанавливается.
Включил на сервере mysql функцию general log (все запросы в файл) и с удивлением обнаруживаю что с сервера 4
ничего не пытается писаться в таблицу статистики, подключения есть только от плагина банлиста (логин тот же).
Ну а теперь самое интересное - на сервере 3 кажется тоже неадекватное, он
немножко беременный. Это когда все работало когда я поставил плагин, когда в таблице игроков около 3000 записей (то есть что-то туда писалось) и даже поле last_join имеет самые последние значения пару часов назад, но есть смутное впечатление что новые данные туда пишутся не все или не пишутся все. Но с сервера 4 точно не пишется ничего т.к. таблицы пусты.
Как я это понимаю? Вызывается форвард client_assist_sql который должен получать 3 параметра и которому передаются 3 параметра, но какого-то черта он ждет 0 параметров (ну бред, не может учет помощи при убийстве получать 0 параметров в принципе. Ну и дальше ничего не выполняется.
Итого:
1. сервера 1 и 2 работает все идеально. Сервер 3 раньше работал сейчас не факт, но на нем мало кто играет и я это не замечал. Сервер 4 - таблицы пусты.
2. с таблицами все нормально
3. с конфигом подключения к БД все нормально, квары в консоль выдаются правильные, подключения с этой машины к той машине где база - есть, проверял mysql клиентом.
4. сам плагин дернут с рабочего сервера, версии AMXModX у них одинаковые потому перекомпилировать смысла нет (сначала был с сервера 3, потом от греха подальше с сервера 1 взял, со 2го не подходит там другая версия AMXModX).
Сейчас еще идейку одну проверю, выключу оптимизацию а именно пусть пишет в базу каждое событие сразу, а не в конце раунда...
-------------
SQL_MakeDbTuple в плагине вызывается только в одном месте, в функции plugin_cfg() и больше нигде. Добавил логи вызова основных функций и пришел к выводу что она не вызывается вообще.
Код
#if AMXX_VERSION_NUM < 183
public plugin_cfg()
#else
public OnConfigsExecuted()
#endif
{
log_amx("[X] OnConfigsExecuted")
#if AMXX_VERSION_NUM < 183
// форсируем выполнение exec addons/amxmodx/configs/amxx.cfg
server_exec()
#endif
// читаем квары на подключение
new host[128],user[64],pass[64],db[64],type[10]
(дальше идет получение значений логина-пароля и т.д. и само подключение, этот код ни разу не был вызван судя по логу). У меня AMX 1.9.0, потому функция объявлена как OnConfigsExecuted. Видимо, в этом причина того что она не вызывается, что там за новомодные заморочки напридумали в AMX последних версий я понятия не имею.
Вот в таком варианте вроде бы заработало
Код
//#if AMXX_VERSION_NUM < 183
// public plugin_cfg()
//#else
// public OnConfigsExecuted()
//#endif
public plugin_cfg()
{
#if AMXX_VERSION_NUM < 183
log_amx("[X] OnConfigsExecuted OLD AMX")
#else
[b]log_amx("[X] OnConfigsExecuted NEW AMX")
#endif
Причем, заметьте, в логе присутствует именно строчка OnConfigsExecuted NEW AMX, но если функция названа OnConfigsExecuted() - ее никто не вызывает... Попробую пока обойтись одним переименованием, 2 строчки в базу записались.
Отредактировал: Metal Messiah, - 30.7.2023, 1:23
Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.