핵심 요약
`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: 백업 없이 재초기화나 재설치를 먼저 진행
특히 네 번째가 가장 위험하다. 시스템 테이블 오류는 조급하게 건드릴수록 복구 비용이 커진다.