HLStatsX:CE и MySQL 5.7

Тема в разделе "HLstatsX:CE", создана пользователем Kruzya, 20 фев 2017.

Метки:
  1. Kruzya

    Kruzya Костылизируя некостылизируемое Ньюсмейкер

    Сообщения:
    2.060
    Симпатии:
    1.511
    Всем добрый вечер. Попробовал на днях "подружить" HLStatsX:CE и MySQL 5.7. Из-за некоторых особенностей новой версии сервера БД, они стабильно и адекватно вместе не работают, а на Ubuntu 16.04, по дефолту идёт именно версия 5.7. Решения из Интернета полноценно не помогли, пришлось снова допиливать под себя. Делюсь инструкцией, вдруг у кого-то такой же "маразм" пробудится (вроде запуска HLStatsX:CE на последней версии MySQL), как у меня.

    1). Выключаем демона, если он запущен.
    2). Открываем файл /HLstats.plib в папке с демоном, ищем:
    PHP:
    $db_conn->do("SET NAMES 'utf8'");
    Заменяем на:
    PHP:
    $db_conn->do("SET NAMES 'utf8mb4'");
    Сохраняем изменения, закрываем.

    3). Создаём файл на веб-хостинге с именем, скажем, /hlstats_mysql57_convert.php, помещаем его в одной папке с веб-частью HLStatsX:CE. Копируем код из под спойлера, и вставляем в него:
    PHP:
    <?php
    Header
    ("Content-Type: text/plain");

    define('IN_HLSTATS'true);
    require_once(
    'config.php');

    define('DB_PORT'3306); // порт от сервера БД. Измените, если он не стандартный.

    $hDB null;
    $errors false;

    $pdo_options =  [
        
    PDO::ATTR_ERRMODE               => PDO::ERRMODE_EXCEPTION,
        
    PDO::ATTR_DEFAULT_FETCH_MODE    => PDO::FETCH_ASSOC
    ];

    try {
            
    $hDB = new PDO(sprintf("mysql:host=%s;dbname=%s;charset=utf8;port=%d"DB_ADDRDB_NAMEDB_PORT), DB_USERDB_PASS$pdo_options);
    } catch (
    PDOException $e) {
            echo(
    $e->getMessage());
            exit(-
    1);
    }

    $hTables $hDB->query("SHOW TABLES;");
    while (
    $row $hTables->fetch(PDO::FETCH_BOTH)) {
        try {
            
    $data $hDB->query("DESCRIBE `" $table "`;");
            while (
    $structrow $data->fetch(PDO::FETCH_BOTH)) {
                if (
    $structrow['Type'] == "datetime")
                    
    $hDB->exec("ALTER TABLE `" $table "` CHANGE `" $structrow['Field'] . "` `" $structrow['Field'] . "` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;");
                else if (
    $structrow['Type'] == "date")
                    
    $hDB->exec("ALTER TABLE `" $table "` CHANGE `" $structrow['Field'] . "` `" $structrow['Field'] . "` DATE NOT NULL;");
            }

            
    $hDB->exec("ALTER TABLE `" $table "` ROW_FORMAT=DYNAMIC;");
            
    $hDB->exec("ALTER TABLE `" $table "` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;");
        } catch (
    PDOException $e) {
            echo(
    "Произошла ошибка при обработке таблицы ");
            echo(
    $table);
            echo(
    "\n");
            echo(
    $e->getMessage());
            echo(
    "\n\n");
            
    $errors true;
        }
    }

    if (!
    $errors) {
        echo(
    "Всё хорошо.");
    } else {
        echo(
    "Возникли некоторые проблемы. Обратитесь в тему, скопировав лог ошибок.");
    }

    4). Запускаем скрипт через браузер. Если вылезет "Всё хорошо.", значит, теперь можно запускать демона.

    Теперь необходимо починить веб-часть. Если она выдаёт ошибку при открытии профилей игроков, и показывает не весь профиль, то Вам эти шаги так же надо сделать.

    1). Подключаемся к веб-серверу через SSH или открываем ISP Manager.
    2). Заходим в конфигурацию MySQL сервера.
    Обратите внимание: заходить надо из под пользователя root!
    1). Открываем раздел "Настройки", ищем "Серверы баз данных".
    2). Выбираем свой сервер, нажимаем "Настройки".
    3). Ищем параметр "sql-mode", нажимаем "Изменить".
    4). Добавляем в самое начало "STRICT_TRANS_TABLES," (запятая обязательна!).
    5). Нажимаем "Ok".
    [​IMG]
    [​IMG]
    [​IMG]
    1). Переходим в папку конфигурации MySQL и открываем файл любым удобным текстовым редактором.
    Код:
    [email protected]:~# cd /etc/mysql/mysql.conf.d/
    [email protected]:/etc/mysql/mysql.conf.d# nano mysqld.cnf
    2). Ищем параметр sql-mode, дописываем в самое начало "STRICT_TRANS_TABLES," (запятая обязательна!). Если не нашли, копируем и вставляем следующую строку в самый конец файла:
    Код:
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    3). Сохраняем файл и закрываем редактор. В nano для сохранения - это комбинация клавиш CTRL + O, после чего Enter. Закрытие редактора - CTRL + X.

    4). Перезапускаем MySQL-сервер.
    Код:
    [email protected]:/etc/mysql/mysql.conf.d# service mysqld restart

    После всех вышепроделанных операций, демон и веб-часть HLStatsX:CE "подружились" с новой версией MySQL. По крайней мере, ошибками не сыплет, вроде как.
    Тема будет обновляться по мере возникновения новых проблем у этой связки.
     
  2. nikita1811

    nikita1811

    Сообщения:
    135
    Симпатии:
    33
    Спасибо, выручил.
    P.S Надеюсь когда-нибудь появится рефорк HLStatsX:CE от тебя:ab:
     
    Иванчо Бальбовски нравится это.
  3. Kruzya

    Kruzya Костылизируя некостылизируемое Ньюсмейкер

    Сообщения:
    2.060
    Симпатии:
    1.511
    Было бы желание - был бы и рефорк. Пока что его нет. Да и неохота как-то копаться в коде, который, вроде бы, старее того, что используется в SourceBans.
    Оффтоп
     
  4. Dreizehnt

    Dreizehnt Unteroffizier

    Сообщения:
    774
    Симпатии:
    301
    Маркони, да Поповы кругом, так выходит что придумывают вместе с тобой :D... А вообще если начать, может задонатим тебе и люди которые хотят получить систему будут на виду, тебе не на энтузиазме работать и мы хоть как-то отплатим? :D
     
    Иванчо Бальбовски и Meowmurmur нравится это.
  5. Red4911

    Red4911

    Сообщения:
    121
    Симпатии:
    25
    Я бы тоже задонатил на это дело. Все таки давно пора уже эту стату обновлять.
     
  6. Kruzya

    Kruzya Костылизируя некостылизируемое Ньюсмейкер

    Сообщения:
    2.060
    Симпатии:
    1.511
    Если очень интересно, в планах есть переписать HLStatsX:CE. Правда, только для себя.
    Был даже куплен вот такой шаблон.

    В планах:
    • Переписать полностью веб.
    • Доработать плагины.
    • Доработать демона.
    Если будет что-то потестить - возможно, солью) Правда, не в паблик)
     
  7. Red4911

    Red4911

    Сообщения:
    121
    Симпатии:
    25
    А зачем его покупать, эти шаблоны и так по инету валяются. А так пиши я потещу, ну и донат само собой с меня.
     
  8. Kruzya

    Kruzya Костылизируя некостылизируемое Ньюсмейкер

    Сообщения:
    2.060
    Симпатии:
    1.511
    Сам шаблон мне понравился, хотел отблагодарить автора за труды. А там как раз скидочка была хорошая...
     
    Monomizer и Red4911 нравится это.
  9. Инженер

    Инженер

    Сообщения:
    41
    Симпатии:
    1
    Тебе не известно? как сделать так, чтобы hlstatsx брал названия кланов не с ника, с аименно с клан-тега в cs:go, потому что сейчас никто не пишет клан в ник а пишут в клан тег
     
  10. Kruzya

    Kruzya Костылизируя некостылизируемое Ньюсмейкер

    Сообщения:
    2.060
    Симпатии:
    1.511
    @bodya020309, хлстатс берет всю инфу из логов. Следовательно, тебе надо как-то заставить его увидеть строчку в логе, что у игрока клан тег ХХХХХ. Ну и придется возможно демона покопать, чтобы он это корректно обрабатывал.
     
  11. Инженер

    Инженер

    Сообщения:
    41
    Симпатии:
    1
    понял, в каких файлах копать не подскажешь?
     
  12. HooLIGUN

    HooLIGUN MixGamer

    Сообщения:
    801
    Симпатии:
    172
    hlstats-awards.pl , код начинается с sub DoClans
    --- Добавлено позже ---
    Или в файле hlstats.pl
     
    Последнее редактирование: 8 мар 2017
    Monomizer нравится это.