'performance_schema.session_variables'테이블이 존재하지 않습니다


299

MySQL을 5.7.8-rc로 업그레이드하고 서버에 로그인 한 후 오류가 발생했습니다.

Table 'performance_schema.session_variables' doesn't exist

이에 대한 해결책을 찾을 수 없습니다. 도울 수 있니 ?


2
다른 것. 업그레이드가 실패한 것 같습니다. 업그레이드 프로세스를 다시 수행하거나 5.7.8-rc버전 및 DB 전체 백업에서 복원을 다시 설치 하는 것이 좋습니다.
Rahul

2
mysql_upgrade코어 테이블 / DB가 변경되었는지 확인하기 위해 실행 했습니까?
Marc B

그래, 내가 만든 mysql_upgrade마지막 시도하고 다시 설치하십시오. 그것이 작동하지 않을 경우 나는 5.6 버전으로 다운 그레이드 할 수 있습니다
TAZ

28
같은 문제가 발생하여 해결하고 실행 mysql_upgrade -u root -p --force한 다음 DB 서버를 다시 시작했습니다.
robregonm

mysql_upgrade 명령이 작동하지 않으면 mysql.performance_schema 테이블이 손상되었을 수 있습니다. 이 문제가있었습니다. 문제를 해결하기 위해 apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1 명령을 사용하여 데이터베이스 서버를 제거했습니다. 모든 데이터베이스 바이너리, 구성 및 데이터 파일이 제거되었습니다. 다음으로 데이터베이스 서버를 다시 설치하고 데이터베이스를 다시 가져 왔습니다. 데이터베이스 서버는 문제없이 실행되었는지 후
디르 라티프에게

답변:


227

mysql_upgrade도 저에게 효과적이었습니다.

# mysql_upgrade -u root -p --force
# systemctl restart mysqld

감사합니다.


25
mysql.server restartossql에서 homebrew 설치를 사용하고 있기 때문에 mysqld를 다시 시작해야 했기 때문에 도움이되었습니다. 그렇지 않으면 잘못된 구조의 session_variables에 대한 오류가 발생했습니다.
Geoffrey Wiseman

OS X 10.10.5 (Yosemite)에서 Homebrew와 동일한 동작. 업그레이드를 수행하면 데이터베이스를로드하려고 할 때 Sequel Pro 1.1 (빌드 4499)의 충돌이 수정됩니다.
William Turrell

4
Native table 'performance_schema'.'session_variables' has the wrong structure
stephen

8
사용중인 경우로 brew services서버를 다시 시작할 수 있습니다 brew services restart mysql.
Frederik Kammer

1
이것은 나를 위해 작동하지 않습니다, 정답은 viq에 의해 제공됩니다. 쇼 호환성을 활성화하기 위해서만 필요합니다.
kato2

482

@robregonm 제안 명령을 실행 한 후 mysql 서버에 로그온 할 수있었습니다.

mysql_upgrade -u root -p --force

MySQL 서버를 다시 시작해야합니다.


6
잘 작동했습니다. 감사합니다. 이유가 무엇인지 알고 싶습니다.
구절

2
내가지고있어 Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL server내가 올바른 루트 암호를 사용하고 있더라도. 어떤 도움? :-/
sixty4bit

4
@ sixty4bit -p 제거
Mike Mellor

1
@NevilleNazerane 쉬운 PHP에 익숙하지 않지만 mysql이 설치된 위치를 찾은 다음 cdm 프롬프트를 열고 디렉토리를 해당 위치로 변경하면됩니다. 이제 명령을 실행할 수 있어야합니다.
Mihai Caracostea

4
@diguage 그 이유는 MySQL의 버전 업그레이드가 내부 메타 데이터에 대해 호환되지 않는 버전의 스키마를 도입했기 때문입니다. 나에게 Homebrew를 사용하여 Mac에서 MySQL 5.6을 MySQL 5.7로 업그레이드하고 MySQL 데이터 디렉토리는 변경되지 않았으므로 새 버전의 MySQL은 오래된 내부 메타 데이터를 읽었지만 어떻게 해야할지 모르겠습니다. 여기서 본 오류는 그 문제의 명백한. mysql_upgrade다시 시작한 후 모든 것이 작동했습니다. 참조 : dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Devy

110
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;

에 따라 http://bugs.mysql.com/bug.php?id=78159 날 위해 일했습니다.


1
이것은 나를 위해 완벽하게 작동했습니다! 그리고 너무 번거로운 mysql 서버를 다시 시작할 필요가 없습니다
anu.agg

3
죄송합니다. 바주카를 사용하여 비행을하는 것과 같은 다소 큰 솔루션입니다. 이 호환성 스위치에는 더 많은 효과가 있으므로 모든 효과를 원치 않을 수도 있습니다.
Tuncay Göncüoğlu

@Tuncay Göncüoğlu 이러한 부작용은 무엇입니까?
katzmopolitan

여기에 읽기 @katzmopolitan : dev.mysql.com/doc/refman/5.7/en/...를 . 변경 사항은 주로 INFORMATION_SCHEMA 처리 (보안 등)와 관련이 있지만 더 있습니다.
Tuncay Göncüoğlu

이것은 나에게도 효과가있었습니다. 내가 얻은 오류 메시지는 mysqldump에서 온 것입니다. 제안 된 변경을 한 후에 mysqldump가 작동했습니다. 덤프가 있으면 show_compatibility_56을 다시 OFF로 변경했습니다.
Bryan

23

위의 답변 중 실제로 어떤 일이 발생했는지 설명하지 않았 으므로이 문제에 대해 더 자세히 설명하기로 결정했습니다.

예, 해결책은 다음과 같이 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 업그레이드를 실행하는 것이 가장 좋습니다. 플래그를 설정하는 것은 하나의 옵션이지만,이 스레드에서 이미 지적한대로 자체 의미가 있습니다.

둘 다 작동하지만 결과에 가중치를 부여하고 선택 사항을 알고 있어야합니다. :)


1
감사. 나는 점프하고 변경하기 전에이 문제의 원인이 무엇인지 궁금했습니다.
Ken Ingram

4

없이 다음 단계를 수행하십시오 -p.

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

나는 같은 문제가 있었고 작동합니다!


작동합니다! 만 systemctl restart mysqld작동하지 않았다.
닌자

다음 사용systemctl restart mysql
BitDEVil2K16

1

sixty4bit 질문으로, mysql 루트 사용자가 잘못 구성된 것 같으면 mysql 공식 소스에서 구성 프로그램 확장을 설치하십시오.

https://dev.mysql.com/downloads/repo/apt/

새로운 루트 사용자 암호를 설정하는 데 도움이됩니다.

저장소 (debian / ubuntu)를 업데이트하십시오.

apt-get update

0

내 시스템의 문제는 여전히 Mysql 5.6을 설치했기 때문에 해당 설치의 mysql_upgrade.exe가 5.7 대신 사용되었다는 것입니다. 탐색 C:\Program Files\MySQL\MySQL Server 5.7\bin및 실행.\mysql_upgrade.exe -u root


0

mysql_upgrade -u root -p --force명령 을 사용하는 동안 이 오류가 발생하는 경우

Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13

sudo명령 앞에를 추가하십시오 . 그것은 나를 위해 일했고 내 문제를 해결했습니다. 그래서, 그것은 sudo mysql_upgrade -u root -p --force:)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.