MySql * совершенно случайно * Невозможно подключиться к любому из указанных хостов MySQL

Этот убивает меня. У нас есть приложение ASP.NET/Mono в базе данных MySQL. В течение нескольких месяцев мы страдали от совершенно случайного, но последовательного появления "Невозможно подключиться к любому из указанных хостов MySQL". Я ни в коем случае не профессионал в MySQL, и я надеюсь, что это что-то глупое.

Особенности:
MySQL 5.5.17
MySQL, Connector/Net 6.4.4
Моно 2.10.8
MonoDevelop 2.8.6.5

Строка подключения: SERVER=localhost,3306;DATABASE=xxx;UID=xxx;PWD=xxx; TIMEOUT ПОДКЛЮЧЕНИЯ =90;Encrypt=false;

Для Max_connections установлено значение 150. Никогда не должно быть более 5 соединений, и все они активны (возможно, из-за объединения).

  • Приложение C# ASP.NET 3.5. В течение многих лет работает на Windows/IIS. Девять месяцев назад наш рынок побудил нас отказаться от Windows, поэтому мы (легко можно добавить) перенесли все это в Mono/Apache.

  • Эта проблема возникает только на стороне Mono, но это очень важно, так как мы прекратили поддержку Windows.

  • Происходит в среднем около 10 раз в час, но расстояние сильно варьируется.

  • Проблема была засвидетельствована в следующих конфигурациях:

Ubuntu 11 / Apache2 / mod_mono
OSX Lion / Apacke2 / mod_mono
Ubuntu 11 / xsp2 / MonoDevelop отладочный сервер
OSX Lion/xsp2/MonoDevelop отладочный сервер

  • Перепутали с keepalive, wait_timeout, connectionreset и т. Д. Безрезультатно. Сроки, кажется, не имеют никакого эффекта. Ошибка происходит мгновенно на conn.open - не после истечения времени ожидания соединения.

  • Вот подсказка - приложение не будет работать с Pooling = false. Почти каждая попытка подключения терпит неудачу. Конечно, я хочу объединиться, но я не уверен, почему это не сработает.

  • Приложение имеет встроенный "сердцебиение" (сеанс пользователя в базе данных) - каждые 2 минуты.

  • Самый сводящий с ума из всех? Это абсолютно невозможно воспроизвести по требованию в рабочей среде - это случайно. Я проверил размеры запросов, время выполнения и т. Д.

  • Я могу сделать это ровно в одном сценарии: при первом запуске сервера Ubuntu или OSX Mono впервые подключается к MySQL - это произойдет тогда. После этого никто не угадает.

1 ответ

Хорошо, это старо, но я потерял так много времени на этом, я должен поделиться этой спасительной статьей, которую я наконец нашел: заставить Mono и Mysql играть хорошо вместе

И я подытожу для случая, когда ссылка когда-нибудь закончится на 404: КАЖДАЯ переменная строки соединения ДОЛЖНА быть определена. Итак, да, это включает в себя порт, который мне никогда не приходилось определять в строке подключения когда-либо в моей жизни.

Для меня это решило проблему.

Другие вопросы по тегам