2014-09-09 1 views
4

나는 지금 다음과 같은 오류가 발생하고 있습니다.MySQL - 인증 (단 몇 시간 만 해당)

'mysql_native_password'메소드를 사용하여 'root'사용자의 'localhost'호스트 인증에 실패했습니다. 스트림에서 읽기가 실패했습니다.

나는 연결 문자열이 정확하다는 것을 안다 - 먼저 응용 프로그램이 시작되면 테스트되고 실패하면 응용 프로그램은 메시지를 표시하고 종료한다.

둘째로,보고하는 기능은이 기능을 사용하여 대부분의 시간을 올바르게 연결하고 있으며, 때때로 발생합니다.

127.0.0.1로 변경하려고 시도했지만 다른 것 같지 않습니다.

Windows Server 2012 64 비트입니다.

127.0.0.1 localhost를 호스트 파일에 추가했습니다.

응용 프로그램이 올바르게 실행되고 데이터베이스에 연결되는 시간의 99 %에이 오류가 발생합니다.

show full processlist 명령을 확인한 결과 언제나 몇 개의 연결 만 있습니다.

나는 이것을 설명하기 위해 길을 잃었고 그것을 고치는 법을 알 수 없다.

감사합니다, 짐

답변

0

이것은 아주 오래된,하지만 난 그냥이 문제에 대한 해결책을 발견하기 때문에 난 그냥 사람이 아직까지 내가이 말을 수 (그것을 찾고있는 경우에 그것을 공유 할 현재 MySQL 릴리스에서도 문제가 있음).

이러한 종류의 문제는 this bug report에 설명되어 있습니다.

내가 그 버그 리포트에 여기에 가장 중요한 답을 인용하고 있습니다 :

시스코 알베르토 Tirado 발라

안녕하세요 호르헤 [2014 15시 40분 5월 21일].

당신은 모든 연결이 소켓에 의해 수행되는 클라이언트 - 서버 응용 프로그램, 당신은 연결을 만들 때 당신이 당신의 클라이언트와 서버 간의 소켓을 열 로 작업 및 아이디/ProccesId 은/할당 예약되어 있습니다 클라이언트가 요청한 연결에 대한 서버 서버가 다시 시작되면 클라이언트에 제공된 ID는 이므로 새 유효한 연결을 만들어야 에 유효한 소켓을 가져 오는 새 소켓을 열어야합니다.

잠시 후 연결이 비활성 상태이면 서버가 연결을 종료하거나 연결을 닫을 수 있다고 생각해야합니다. 연결이 열려 있으면 풀에 대한 연결 수가 줄어들 기 때문에 연결 열기에도 연결 풀이 영향을 줄 수 있습니다. 즉, 클라이언트가 동시에 연결되어 있으면 서버 연결 수에서 10 연결이 적습니다.

당신이 연결에 다음 방법 핑 예를 들어, 유효 것을 검증 할 방법이 할 수있는 해결 방법으로 응용 프로그램의 설계 (글로벌 연결을 가짐), 변경할 수없는 경우 서버와 핑은 다시 연결을 엽니 다 실패했을 경우

.... 
MySqlConnection _conn = new MySqlConnection("MyConnectionString"); 
private void CheckConnection() 
{ 
    if(!_conn.Ping()) 
    { 
    _conn.Open(); 
    } 
} 
.... 

당신이 코드는 매우 간단 볼 수 있듯이 있으며 다음 방식으로 작동 : 연결이 연결이 경우 서버를 ping 할 때 은 (는)입니다.소켓 정보가있는 내부적으로 소켓 정보가있는 스트림은 으로 종료되고 연결은 상태가 닫히고 으로 설정되고 이 있으면 연결 풀에서 잘못된 연결이 제거 된 다음 연결을 다시 열면 연결 풀이 제거됩니다. 새로운 연결 새로운 유효한 소켓을 의미합니다. ping이 성공하면 같은 연결을 계속 사용하십시오.

.... 
private void button1_Click(object sender, EventArgs e) 
{ 
    //assuming that the connection is already open 
    CheckConnectionState(); 
    var cmd = new MySqlCommand("select 1", _conn); 
    cmd.ExecuteNonQuery(); 
} 
.... 

이 단지입니다 : 유효하지 않은 바로 그 때

당신이 데이터베이스에 대한 작업을 수행하기 전에 호출 할 수 있습니다 그것을 사용하고, 연결이 다시 열립니다 해결 방법 및 지금까지 모든 연결을 알고있는 경우 데이터베이스 서버가 동일한 동작을 수행합니다. 서버가 인 경우 모든 연결이 손실되고 서버가 손실 될뿐만 아니라 서버도 모든 사용되지 않는 연결을 정리합니다.

감사합니다.

관련 문제