Ошибка MySQL [Предупреждение] Соединение прервано … к базе данных: … (Ошибка при чтении пакетов связи)

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

Я получаю эту ошибку в логах 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 - Не удалось проверить соединение me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl@52d3db29 (Никаких операций не допускается после закрытия соединения.). Возможно, стоит рассмотреть использование более короткого значения maxLifetime.
java.sql.SQLTransientConnectionException: luckperms-hikari - Соединение недоступно, запрос завершился по тайм-ауту после 5002мс.
    at me.lucko.luckperms.lib.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:696)
    at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
    at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
    at me.lucko.luckperms.lib.hikari.HikariDataSource.getConnection(HikariDataSource.java:100)
    at me.lucko.luckperms.common.storage.implementation.sql.connection.hikari.HikariConnectionFactory.getConnection(HikariConnectionFactory.java:169)
    at me.lucko.luckperms.common.messaging.sql.SqlMessenger.getConnection(SqlMessenger.java:84)
    at me.lucko.luckperms.common.messaging.sql.AbstractSqlMessenger.pollMessages(AbstractSqlMessenger.java:114)
    at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1423)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.sql.SQLNonTransientConnectionException: Никаких операций не допускается после закрытия соединения.
    at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:73)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2495)
    at me.lucko.luckperms.lib.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:566)
    at me.lucko.luckperms.lib.hikari.pool.PoolBase.isConnectionAlive(PoolBase.java:173)
    at me.lucko.luckperms.lib.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
    ... 11 more
Caused by: me.lucko.luckperms.lib.mysql.cj.exceptions.ConnectionIsClosedException: Никаких операций не допускается после закрытия соединения.
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
    at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
    at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
    at me.lucko.luckperms.lib.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
    at me.lucko.luckperms.lib.mysql.cj.NativeSession.checkClosed(NativeSession.java:1171)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:573)
    at me.lucko.luckperms.lib.mysql.cj.jdbc.ConnectionImpl.setNetworkTimeout(ConnectionImpl.java:2491)
    ... 14 more

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

31.57.156.30:25577/tcp - Порт открыт - время=1.188мс
31.57.156.30:25577/tcp - Порт открыт - время=1.599мс
31.57.156.30:25577/tcp - Порт открыт - время=5.071мс
31.57.156.30:25577/tcp - Порт открыт - время=1.690мс
31.57.156.30:25577/tcp - Порт открыт - время=1.538мс
31.57.156.30:25577/tcp - Нет ответа - время=2015.160мс
31.57.156.30:25577/tcp - Нет ответа - время=2015.892мс
31.57.156.30:25577/tcp - Порт открыт - время=6.803мс
31.57.156.30:25577/tcp - Порт открыт - время=1.295мс
31.57.156.30:25577/tcp - Порт открыт - время=6.280мс
31.57.156.30:25577/tcp - Порт открыт - время=1.411мс
31.57.156.30:25577/tcp - Порт открыт - время=4.874мс

Я пытался изменить настройку конфигурации my.ini с max_allowed_packet=16M (по умолчанию) на
max_allowed_packet=256M.

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

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

Возможные причины и решения:

  1. Проблемы с сетью:

    • Ваше описание проблемы, включая потерю пакетов в процессе пинга вашего X-сервера на сервере базы данных, указывает на проблемы с сетью. Это может быть вызвано неполадками в маршрутизации, перегрузкой сети или нестабильным соединением.
    • Решение: Выясните, имеется ли на сети оборудование, которое может быть перегружено, и рассмотрите возможность оптимизации маршрутизации. Проверьте сетевые устройства, такие как коммутаторы и маршрутизаторы, на наличие ошибок или неисправностей.
  2. Настройки конфигурации MySQL:

    • Вы упомянули, что изменили параметр max_allowed_packet в файле my.ini. Если ошибка продолжается, несмотря на это, возможно, требуется настройка других параметров.
    • Решение: Увеличьте значения wait_timeout и interactive_timeout, чтобы избежать разрыва соединений из-за долгого простоя. Сравните текущее использование ресурсов MySQL с параметрами в конфигурации, например, такими как net_read_timeout и net_write_timeout.
  3. Настройки библиотеки HikariCP:

    • Библиотека, используемая вашим плагином, может использовать слишком долгое время жизни соединений (параметр maxLifetime), в результате чего соединения становятся невалидными до их завершения.
    • Решение: Установите более короткое значение maxLifetime, чтобы оно было меньше, чем значение wait_timeout в MySQL. Это предотвратит закрытие соединений до их повторного использования.

Дополнительные действия:

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

Ваше решение будет зависеть от конкретных условий и сети, поэтому проведите диагностику и протестируйте каждый предложенный метод, чтобы точно установить причину и устранить проблему. Оптимизация этих аспектов поможет обеспечить стабильную работу вашего сервера и базы данных.

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

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