위의 답변 중 실제로 어떤 일이 발생했는지 설명하지 않았 으므로이 문제에 대해 더 자세히 설명하기로 결정했습니다.
예, 해결책은 다음과 같이 MySQL 업그레이드 명령을 실행하는 것입니다. mysql_upgrade -u root -p --force
것입니다.
이 문제의 근본 원인은 다음의 원인 performance_schema
일 수있는 의 손상입니다 .
- 유기적 손상 (카붐, 엔진 버그, 커널 드라이버 문제 등)
- mysql 패치 중 손상 (특히 주요 버전 업그레이드의 경우 mysql 패치 중에이 문제가 발생하지 않은 것은 아닙니다)
- 간단한 "drop database performance_schema"는 분명히이 문제를 야기하며 손상된 것처럼 동일한 증상을 나타냅니다.
이 문제는 패치 이전에도 데이터베이스에 있었을 수도 있지만 MySQL 5.7.8에서 발생한 것은 특히 플래그 show_compatibility_56
가 기본값 ON
을 기본값으로 설정하지 않고OFF
입니다. 이 플래그는 다양한 MySQL 버전에서 변수 (세션 및 전역)를 설정하고 읽는 쿼리에서 엔진이 작동하는 방식을 제어합니다.
MySQL 5.7+는 on performance_schema
대신 이러한 변수를 읽고 저장하기 시작했기 information_schema
때문에이 플래그는 ON
첫 번째 릴리스에서 도입 되어이 변경의 폭발 반경을 줄이고 사용자에게 변경에 대해 알리고 익숙해 지도록했습니다.
하지만 연결이 실패하는 이유는 무엇입니까? 사용중인 드라이버 (및 구성)에 따라 데이터베이스에 시작된 모든 새 연결 (예 : show variables
등)에 대해 명령을 실행하게 될 수 있습니다 . 이러한 명령 중 하나가 손상된 액세스를 시도 할 수 있기 때문에performance_schema
있으므로 전체 연결이 완전히 시작되기 전에 전체 연결이 중단됩니다.
그래서, 요약, 당신은 할 수 있었다 (지금 얘기하는 것은 불가능) performance_schema
중 하나를 없거나 패치하기 전에 손상. 5.7.8 패치는 엔진이 변수를 읽도록 강제했습니다 performance_schema
( information_schema
플래그가 바뀌어 변수를 읽는 대신 ON
). 때문에 performance_schema
손상되었습니다, 연결이 실패합니다.
다운 타임에도 불구하고 MySQL 업그레이드를 실행하는 것이 가장 좋습니다. 플래그를 설정하는 것은 하나의 옵션이지만,이 스레드에서 이미 지적한대로 자체 의미가 있습니다.
둘 다 작동하지만 결과에 가중치를 부여하고 선택 사항을 알고 있어야합니다. :)
5.7.8-rc
버전 및 DB 전체 백업에서 복원을 다시 설치 하는 것이 좋습니다.