MySQL `mysql.proxies_priv` 오류 해결: `mysql_upgrade`가 필요한 경우와 아닌 경우

핵심 요약

`Missing system table mysql.proxies_priv` 오류는 보통 업그레이드 뒤 시스템 테이블 구조가 서버 버전과 맞지 않을 때 발생한다.

다만 해결법은 버전에 따라 다르다. MySQL 5.7 계열은 `mysql_upgrade`가 직접적인 해결책일 수 있지만, MySQL 8.0.16 이상은 서버가 시스템 테이블 업그레이드를 내부적으로 처리하므로 같은 답을 그대로 적용하면 문서가 오래된 정보가 된다.

이 오류가 뜻하는 것

로그에 아래와 같은 메시지가 보이면, 핵심은 단순하다.

[ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it
[ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure

이 조합은 대개 아래 둘 중 하나다.

  • MySQL 바이너리만 올리고 시스템 테이블 업그레이드를 마치지 못한 경우
  • 이전 버전 데이터 디렉터리를 새 버전 서버가 그대로 읽으려는 경우

문제의 본질은 권한 테이블과 성능 스키마 구조가 현재 서버 기대값과 다르다는 점이다.

먼저 확인할 것

  • 서버 버전: 5.7인지 8.0 이상인지
  • 최근 작업: 패키지 업그레이드, 데이터 디렉터리 복사, 컨테이너 교체가 있었는지
  • 백업 여부: `mysql` 시스템 스키마와 데이터 디렉터리 백업이 있는지

버전 확인 없이 바로 명령을 치는 게 가장 흔한 실패 패턴이다.

버전별 판단 기준

상황 판단 권장 대응
MySQL 5.7 또는 그 이전 업그레이드 직후 `mysql_upgrade` 필요 가능성 높음 백업 후 `mysql_upgrade -uroot -p` 실행
MySQL 8.0.16 이상 `mysql_upgrade`를 해결책으로 쓰기 애매함 업그레이드 절차, 서버 기동 로그, 데이터 디렉터리 정합성부터 확인
버전 혼합 의심(패키지만 교체, 데이터는 예전 상태) 구조 불일치 가능성 큼 정상 업그레이드 경로 재점검

MySQL 5.7 계열이라면

이 글의 원래 해결법은 5.7 계열에서는 여전히 의미가 있다.

mysql_upgrade -uroot -p

실행 뒤 확인 포인트는 두 가지다.

  • `mysql.*` 테이블 점검이 끝나는지
  • `mysql_fix_privilege_tables … OK`가 보이는지

그 다음 MySQL을 재시작하고 같은 오류가 사라졌는지 본다.

이 방식이 맞는 조건

  • 서버가 5.7 계열이다
  • 최근 업그레이드 직후다
  • 시스템 테이블 구조 불일치 로그가 반복된다

MySQL 8.0 이상이라면

여기서는 예전 문서처럼 `mysql_upgrade`만 적어두면 오히려 오해를 만든다.

8.0.16부터는 서버가 내부적으로 업그레이드를 수행하므로, 같은 오류가 보인다면 아래를 먼저 의심해야 한다.

  • 지원되지 않는 업그레이드 경로
  • 중간 버전 절차 누락
  • 데이터 디렉터리 손상 또는 불완전 복사
  • 컨테이너/패키지와 실제 데이터 디렉터리 버전 불일치

이때의 실전 체크리스트

  • `mysqld –version`으로 실제 서버 버전 확인
  • 기동 로그에서 업그레이드 관련 에러가 더 있는지 확인
  • 최근 백업본이 있으면 복구 가능 상태인지 확인
  • 공식 업그레이드 경로를 다시 확인
  • 가능하면 테스트 환경에서 같은 데이터로 먼저 검증

자주 하는 실수

  • 실수 1: 로그 한 줄만 보고 무조건 `mysql_upgrade` 실행
  • 실수 2: 8.0 문젠데 5.7 해결법을 그대로 적용
  • 실수 3: 시스템 테이블 문제를 일반 사용자 DB 문제로 착각
  • 실수 4: 백업 없이 재초기화나 재설치를 먼저 진행

특히 네 번째가 가장 위험하다. 시스템 테이블 오류는 조급하게 건드릴수록 복구 비용이 커진다.