2012-02-20 5 views
5

이 하나가 나를 죽이고 있습니다. 우리는 MySQL 데이터베이스에 ASP.NET/Mono 응용 프로그램을 가지고 있습니다. 몇 달 동안 우리는 "임의의 지정된 MySQL 호스트에 연결할 수 없습니다"라는 완전히 무작위이지만 일관된 발생에 시달려 왔습니다. 나는 결코 MySQL 전문가는 아니며, 이것이 바보 같은 것이라고 생각합니다.MySql * 완전 무작위 * 지정된 MySQL 호스트에 연결할 수 없습니다.

구체적인 :
의 MySQL 5.5.17
MySQL의 커넥터/네트 6.4.4
모노 2.10.8
MonoDevelop 2.8.6.5

연결 문자열 : SERVER = 로컬 호스트, 3306; DATABASE = XXX ; UID = xxx; PWD = xxx; 연결 시간 초과 = 90; Encrypt = false;

Max_connections는 150으로 설정됩니다. 연결 수가 5 개를 넘지는 않으며 풀 (pooling) 때문일 수 있습니다.

  • 응용 프로그램은 C# ASP.NET 3.5입니다. Windows/IIS에서 수년간 바위처럼 단색으로 실행됩니다. 9 개월 전 우리 시장은 우리가 Windows에서 내릴 수있게 해 주었기 때문에 모든 것을 Mono/Apache로 옮겼습니다.

  • 문제는 모노 측에서만 발생하지만 중요한 것은 Windows 지원을 중단했기 때문입니다.

  • 시간당 평균 약 10 회 발생하지만 간격은 격렬합니다.

  • 문제는 다음과 같은 구성에서 목격되었습니다

우분투 11/아파치/mod_mono
OSX 라이온/Apacke2/mod_mono
우분투 11/xsp2/MonoDevelop 디버그 서버
OSX 라이온/xsp2/MonoDevelop

  • 디버그 서버는 keepaliv로 엉망 e, wait_timeout, connectionreset 등을 사용할 수 없습니다. 타이밍은 효과가없는 것 같습니다. conn.open에서 오류가 즉각 발생하며 연결 ​​시간 초과 이후가 아닙니다.

  • 여기에 단서가 있습니다. 앱은 Pooling = false로 절대 실행되지 않습니다. 거의 모든 연결 시도가 실패합니다. 당연히 나는 풀링을 원하지만, 왜 그것이 없이는 작동하지 않을지 모르겠다.

  • 응용 프로그램에는 2 분마다 "하트 비트"(데이터베이스의 사용자 세션)가 내장되어 있습니다.

  • 모두를 가장 많이 상하게합니까? 달리기 환경에서는 요구에 따라 복제 할 수 없으며 무작위입니다. 쿼리 크기, 실행 시간 등을 살펴 보았습니다.

  • 우분투 서버 또는 OSX를 처음 시작할 때 Mono가 MySQL에 처음 연결될 때 - it 그런 다음에 일어날 것입니다. 그 후에는 누구나 추측 할 수 있습니다.

+0

max_connections 제한은 어떻습니까? 여러 번 허용되는 최대 허용치에 도달 할 수 있습니다. –

+0

첫 번째 연결에서 발생하는 일은 거의 없을 것으로 보입니다. – DNA

+0

+1 질문이 있으 십니다.하지만 serverfault.com에서 더 나은 답변을 드릴 것입니다. –

답변

0

좋아,이 오래된, 그러나 나는이에 너무 많은 시간을 잃어, 나는했습니다 내가 마지막으로 발견 기사 절약이 생활 공유 : Getting Mono and Mysql to play nice together

을 그리고 난 경우를 위해 합 링크는 언젠가 404에 끝납니다 : 연결 문자열의 모든 변수를 반드시 정의해야합니다. 그래서 예, 포트을 포함합니다. 전에는 결코 연결 문자열에 정의하지 않아도되었습니다.

나를 위해 문제가 해결되었습니다.