Ошибка MYSQL [Warning] Прервано соединение 8090 с базой данных: ‘xxx’ пользователь: ‘xxx’ хост: ‘xxx’ (Ошибка при чтении пакета связи)

Вопрос или проблема

Я получаю эту ошибку в журналах MYSQL.

2025-01-01  9:02:42 8090 [Warning] Aborted connection 8090 to db: 'xxx' user: 'xxx' host: 'xxx' (Got an error reading communication packets)

Также я получаю эту ошибку в плагине на серверной стороне, когда эта ошибка MYSQL появляется на моей серверной стороне.

[09:02:42] [luckperms-worker-0/WARN]: [me.lucko.luckperms.lib.hikari.pool.PoolBase] luckperms-hikari - Failed to validate connection me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl@52d3db29 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
    [09:02:42] [luckperms-worker-0/WARN]: java.sql.SQLTransientConnectionException: luckperms-hikari - Connection is not available, request timed out after 5002ms.
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:696)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.common.storage.implementation.sql.connection.hikari.HikariConnectionFactory.getConnection(HikariConnectionFactory.java:169)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.common.messaging.sql.SqlMessenger.getConnection(SqlMessenger.java:84)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.common.messaging.sql.AbstractSqlMessenger.pollMessages(AbstractSqlMessenger.java:114)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
    [09:02:42] [luckperms-worker-0/WARN]: Caused by: java.sql.SQLNonTransientConnectionException: No operations allowed after connection closed.
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:73)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2495)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:566)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:173)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
    [09:02:42] [luckperms-worker-0/WARN]:   ... 11 more
    [09:02:42] [luckperms-worker-0/WARN]: Caused by: me.lucko.luckperms.lib.mysql.cj.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
    [09:02:42] [luckperms-worker-0/WARN]:   at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.NativeSession.checkClosed(NativeSession.java:1171)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:573)
    [09:02:42] [luckperms-worker-0/WARN]:   at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2491)
    [09:02:42] [luckperms-worker-0/WARN]:   ... 14 more

Когда я пытаюсь пинговать свой x-сервер на сервере базы данных, потеря пакетов происходит одновременно с каждой ошибкой mysql.

https://imgur.com/7RJIAov

Я пытался изменить этот параметр конфигурации my.ini:

max_allowed_packet=16M по умолчанию,
max_allowed_packet=256M

Ответ или решение

Анализ проблемы с MySQL и предложенные решения

Вы столкнулись с ошибкой MySQL в журнале: [Warning] Aborted connection 8090 to db: 'xxx' user: 'xxx' host: 'xxx' (Got an error reading communication packets) и связанной с ней ошибкой на стороне плагина сервера, использующего HikariCP для управления пулом подключений. Данные ошибки часто указывают на проблемы с сетью или конфигурацией серверного и клиентского ПО, которые могут привести к неожиданному завершению соединений с базой данных.

Анализ причин и рекомендации по решению

  1. Проблемы сети:
    Упоминается о потере пакетов при пинге, что может указывать на нестабильное сетевое соединение между сервером базы данных и вашим приложением. Для решения данной проблемы:

    • Проведите диагностику сети, используя утилиты, такие как ping, traceroute, и netstat, чтобы выявить слабые места в сети.
    • Убедитесь, что ваш сетевой канал достаточен для обработки текущих объемов данных.
    • Проверьте, нет ли временных отключений в сети, влияющих на стабильность соединения.
  2. Конфигурация MySQL:

    • max_allowed_packet: Вы увеличили параметр max_allowed_packet с 16M до 256M. Это шаг в правильном направлении, так как недостаточный размер пакета может вызвать разрывы соединений, но проблема может заключаться и в другом. Убедитесь, что значение достаточно велико для обрабатываемых данных, но не превышает разумные пределы, чтобы избежать перерасхода памяти.
  3. Конфигурация HikariCP:

    • maxLifetime: Логи содержат рекомендацию уменьшить значение maxLifetime. Цель этой настройки — время, в течение которого соединение считается живым. Попробуйте уменьшить это значение до 30 минут или менее (например, 1800000 миллисекунд), чтобы убедиться, что HikariCP создает новые соединения раньше, чем MySQL их закроет из-за таймаута бездействия.

    • Connection Timeout: Можете настроить connectionTimeout, чтобы он был быстрее, что позволит вашим рабочим процессам быстрее получать доступ к соединениям и не сталкиваться с таймаутами. Попробуйте установить значение в 3000 миллисекунд или меньше.

  4. Таймауты на стороне MySQL:

    • wait_timeout и interactive_timeout: Эти параметры определяют, как долго сервер ждет действий перед закрытием неактивных соединений. Увеличьте их значения, если ваши операции связаны с продолжительными процессами ожидающими ответов.
  5. Логи и мониторинг:

    • Обратите внимание на все сообщения об ошибках и предупреждениях в логах. Включите расширенные логи MySQL для более глубокого анализа.
  6. Проблемы с конфигурацией драйвера MySQL:

    • Убедитесь, что драйвер MySQL актуален и совместим с вашей версией MySQL.

Заключение

Это сложная проблема, которая требует внимания к множеству деталей конфигурации как на стороне сервера базы данных, так и на стороне вашего приложения. Последовательно применяйте описанные шаги для решения проблемы, начиная с диагностики сети и корректировки параметров конфигурации MySQL и вашего пула соединений в HikariCP. Будьте внимательны при внесении изменений и следите за логами для оценки эффективности принятых мер.

Оцените материал
Добавить комментарий

Капча загружается...