Mysql: MySQL 5.7 Aborted Connection - Получена ошибка чтения коммуникационных пакетов.

Созданный на 23 мар. 2017  ·  18Комментарии  ·  Источник: go-sql-driver/mysql

Описание проблемы

Должно открыться соединение с MySQL. Однако открытие этого соединения в Golang приводит к ошибке (Получена ошибка чтения коммуникационных пакетов). Открытие MySQL-соединения из cli работает.

Пытался:

  • Увеличение времени ожидания
  • Увеличение connection_time
  • Увеличение максимального размера пакета

Пример кода

func open_mysql(Host *string, Username *string, Password *string, Database *string, parameters string) *sql.DB {
    open, err := sql.Open("mysql", *Username+":"+*Password+"@tcp("+*Host+")/"+*Database+parameters)

    if err != nil {
        log.Printf("%s\n", err)
    }
    return open
}

Журнал ошибок

[Note] Aborted connection 13086 to db: '<redacted>' user: '<redacted>' host: '<redacted but not localhost, outside network connection>' (Got an error reading communication packets)

Конфигурация

Версия драйвера (или git SHA):
последнее извлечение из go get -u github.com/go-sql-driver/mysql на сегодняшний день.

Версия Go:
go версия go1.7.5 darwin / amd64
А ТАКЖЕ
go версия go1.8 darwin / amd64

Версия сервера:
Версия сервера: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)

Серверная ОС:
Ubuntu 16.04.1

Самый полезный комментарий

Я знаю, что это старая проблема, но когда я ищу эту проблему, эта проблема появляется в результатах поиска.
В моем случае проблема возникает из-за того, что я забыл закрыть соединение .

так что просто не забудьте закрыть ваше соединение db.Close()

Все 18 Комментарий

Протестировал с версией go go1.7.3 darwin / amd64

По-прежнему не удается.

Что такое «журнал ошибок»? Это журнал ошибок сервера MySQL?
Если да, не могли бы вы увеличить подробность журнала и вставить журналы перед строкой?
Что показывает log.Printf("%s\n", err) ?

[Note] Aborted connection 13086 to db: '<redacted>' user: '<redacted>' host: '<redacted but not localhost, outside network connection>' (Got an error reading communication packets)

От /var/log/mysql/error.log
Я постараюсь сделать более подробный вывод.

Любопытно, что log.Printf("%s\n", err) не сообщает об ошибках.

На самом деле sql.Open() не создает никакого соединения.
sql.Exec("SELECT 1+1") может создать соединение (и сделать ошибку).

Я попытался увеличить подробность журналов MySQL, используя

SET GLOBAL log_warnings=3;

а также пытались распечатать любые ошибки из запроса sql напрямую, используя

stmt, queryErr := db.Query(sqlQuery.String())
log.Printf("error: %s\n", queryErr.Error())
log.Printf("stmt error: %s\n", stmt.Err())

Но пока не повезло. Выполнение SQL-запроса (которым я, к сожалению, не могу поделиться) в клиенте mysql cli, работает на 100%.

Любые идеи? Это полностью сломало наши двоичные файлы. Они не могут подключиться к базе данных MySQL, локальной или удаленной.

Я пробовал разные версии MySQL и разные версии golang (начиная с 1.7.3).

Я также построил это на Linux-машине со свежей установленной копией github.com/go-sql-driver/mysql без положительного результата.

Мы очень ценим любые указатели, которые вам, ребята, могут понадобиться, чтобы исправить это.

Got an error reading communication packets предполагает, что что-то пошло не так, пока MySQL ждал пакета. Вы можете использовать Wireshark или tcpdump для дальнейшей проверки, что именно происходит, например, после того, как пакет прерывается.

Что означает «но еще нет блокировки»?
Сервер MySQL ничего не регистрирует при увеличении уровня журнала?

@methane переключение уровня журнала с 2 на 3 больше не дало информации.

@julienschmidt Я попробую это сейчас и посмотрю, смогу ли я что-нибудь с этим получить.

Я пробовал разные версии MySQL и разные версии golang (начиная с 1.7.3).

Вы имеете в виду, что такая же проблема возникла и в MySQL 5.6?

В вашем отчете отсутствует подробная информация о том, «что вы пробовали и что получили».

Многие пользователи используют это с MySQL 5.7. Вы - единственный человек, сообщающий о проблеме.
Эта проблема, скорее всего, вызвана вашей средой. Сообщите, пожалуйста, более полную информацию.

@methane Подойдет .

Проблема решена.

Я не знаю, как это сделать. Перекомпилировал код несколько раз, закомментировав определенные разделы. Затем снова раскомментировал версии с конкретными строками, пока не нашел виновника. К сожалению, я раскомментировал все один за другим, и в итоге все заработало. Никаких изменений в коде.

Действительно раздражает. Спасибо, ребята, за ваш вклад и вашу помощь. @julienschmidt, ваша идея по мониторингу tcpdumps была невероятно полезной, спасибо.

Я знаю, что это старая проблема, но когда я ищу эту проблему, эта проблема появляется в результатах поиска.
В моем случае проблема возникает из-за того, что я забыл закрыть соединение .

так что просто не забудьте закрыть ваше соединение db.Close()

У меня была такая же проблема. Код работает с mysql 5.6 и не работает с 5.7.
Еще более любопытно то, что в msyql5.7 select x,y from points limit 10 работает. но с большими ограничениями он не работает с Got an error reading communication packets .
Я попытался изменить параметр конфигурации mysqld max_allowed_packet как я ожидал, но безуспешно.

У меня нет проблем с MySQL 5.7.
Как воспроизвести? код? конфигурация mysql?

Я не уверен, было ли это обновление ОС ( macOS 10.13 ) или обновление MariaDB ( 10.2.9-MariaDB Homebrew ), но сейчас я могу воспроизвести эту ошибку.

Причина вроде бы в любимом нами строгом режиме .
Если отключить, все работает нормально.

Я решаю эту проблему, комментируя значения wait_timeout, interactive_timeout, connect_timeout в моем mysql.sock. Мое предупреждающее сообщение прекращается после того, как я прокомментировал эти строки.
По умолчанию wait_time и interactive_timeout будут равны 28800, при установке MySQL 5.7 на мой производственный сервер MySQL добавил эти строки, после комментирования этих трех строк он работал без отображения предупреждающего сообщения:
"
[Примечание] Прервано соединение с db: '-----' user: '----' host: 'localhost' (Истекло время ожидания чтения коммуникационных пакетов) "

Такая же ошибка с подключением java из Eclipse к MySql 5.7 в Windows 10.
Я обнаружил, что служба mysql57 не работает, и мне нужно перезапустить ее вручную
Через 2 часа работы снова останавливается
2018-09-06T12:22:59.135348Z 62 [Note] Aborted connection 62 to db: 'compute_pin_teh' user: 'compute_pin_teh' host: 'localhost' (Got an error reading communication packets) 2018-09-06T12:22:59.145322Z 63 [Note] Aborted connection 63 to db: 'compute_pin_teh' user: 'compute_pin_teh' host: 'localhost' (Got an error reading communication packets) 2018-09-06T12:23:18.526921Z 65 [ERROR] InnoDB: Operating system error number 21 in a file operation. 2018-09-06T12:23:18.527918Z 65 [Note] InnoDB: Some operating system error numbers are described at http://dev.mysql.com/doc/refman/5.7/en/operating-system-error-codes.html 2018-09-06T12:23:18.527918Z 65 [ERROR] InnoDB: File f:\mysql\tables\compute_pin_teh\photo_resell.ibd: 'Windows aio' returned OS error 121. Cannot continue operation 2018-09-06T12:23:18.528914Z 65 [ERROR] InnoDB: Cannot continue operation. 2018-09-06T12:23:20.924476Z 0 [Note] InnoDB: FTS optimize thread exiting. 2018-09-06T12:24:59.184704Z 65 [Warning] InnoDB: 13 threads created by InnoDB had not exited at shutdown!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги