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

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

3). Создаём файл на веб-хостинге с именем, скажем, /hlstats_mysql57_convert.php, помещаем его в одной папке с веб-частью HLStatsX:CE. Копируем код из под спойлера, и вставляем в него:
Код:
<?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_ADDR, DB_NAME, DB_PORT), DB_USER, DB_PASS, $pdo_options);
} catch (PDOException $e) {
        echo($e->getMessage());
        exit(-1);
}

$hTables = $hDB->query("SHOW TABLES;");
while ($row = $hTables->fetch(PDO::FETCH_BOTH)) {
    try {
        $table = $row[0];
        $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".
1700327966953.png1700327971958.png1700327977532.png
1). Переходим в папку конфигурации MySQL и открываем файл любым удобным текстовым редактором.
Код:
root@kruzefag:~# cd /etc/mysql/mysql.conf.d/
root@kruzefag:/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-сервер.
Код:
root@kruzefag:/etc/mysql/mysql.conf.d# service mysqld restart
После всех вышепроделанных операций, демон и веб-часть HLStatsX:CE "подружились" с новой версией MySQL. По крайней мере, ошибками не сыплет, вроде как.
Тема будет обновляться по мере возникновения новых проблем у этой связки.