MariaDB column_stats 테이블 오류 해결 방법

MariaDB 로그에 다음과 같은 오류가 반복적으로 발생했습니다:

[ERROR] Incorrect definition of table mysql.column_stats: 
expected column 'histogram' at position 10 to have type varbinary(255), 
found type longblob.

여러 스레드 ID에서 동일한 오류가 계속 발생하며, 데이터베이스 성능에 영향을 줄 수 있는 상황이었습니다.


오류 발생 원인

이 오류는 시스템 테이블의 스키마 불일치로 인해 발생합니다. 주요 원인은 다음과 같습니다:

1. MariaDB 버전 업그레이드

  • 이전 버전에서 새 버전으로 업그레이드 시 시스템 테이블 구조가 변경됨
  • 업그레이드 후 mysql_upgrade를 실행하지 않은 경우

2. 데이터베이스 마이그레이션

  • 다른 버전의 MariaDB에서 덤프한 데이터를 복원한 경우
  • 서로 다른 버전 간 시스템 테이블 구조 차이

3. 수동 복원 작업

  • 백업 파일에 포함된 시스템 테이블이 현재 버전과 호환되지 않는 경우

column_stats 테이블이란?

mysql.column_stats는 MariaDB의 통계 정보 저장 테이블입니다:

  • 테이블 컬럼의 통계 데이터 저장
  • 쿼리 옵티마이저가 실행 계획 수립 시 사용
  • histogram 컬럼: 데이터 분포 정보를 저장하는 중요한 필드

MariaDB는 특정 버전부터 histogram 컬럼 타입을 longblob에서 varbinary(255)로 변경했으며, 이로 인해 호환성 문제가 발생할 수 있습니다.


해결 방법

방법 1: mysql_upgrade 사용 (권장)

가장 안전하고 포괄적인 방법입니다.

# MariaDB 업그레이드 도구 실행
sudo mysql_upgrade --force -u root -p

# MariaDB 재시작
sudo systemctl restart mariadb

장점:

  • 모든 시스템 테이블을 자동으로 검사 및 수정
  • column_stats 외 다른 호환성 문제도 함께 해결
  • 공식적으로 권장되는 방법

방법 2: 수동 테이블 수정

특정 테이블만 빠르게 수정하고 싶을 때 사용합니다.

# MariaDB 접속
sudo mysql
-- mysql 데이터베이스 선택
USE mysql;

-- histogram 컬럼 타입 변경
ALTER TABLE column_stats 
MODIFY COLUMN histogram varbinary(255);

-- 권한 테이블 새로고침
FLUSH PRIVILEGES;

-- 종료
EXIT;
# MariaDB 재시작
sudo systemctl restart mariadb

장점:

  • 빠른 실행
  • 특정 문제만 해결 가능

단점:

  • 다른 시스템 테이블 문제는 해결되지 않음

문제 해결 확인

수정 후 다음 명령어로 오류가 해결되었는지 확인합니다:

1. 로그 실시간 모니터링:

sudo journalctl -u mariadb -f

2. 최근 로그 확인:

sudo journalctl -u mariadb --since today

3. 테이블 정상 작동 확인:

sudo mysql -e "DESCRIBE mysql.column_stats;"

histogram 컬럼이 varbinary(255)로 표시되면 정상입니다.


root 계정 접근 오류 해결

만약 다음과 같은 오류가 발생한다면:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

해결책:

# 비밀번호와 함께 실행
sudo mysql_upgrade --force -u root -p

# 또는 sudo로 직접 MySQL 접속
sudo mysql

AlmaLinux에서는 sudo mysql 명령으로 root 권한으로 직접 접속할 수 있습니다.


예방 조치

향후 동일한 문제를 방지하기 위한 모범 사례:

1. 업그레이드 후 필수 작업

sudo mysql_upgrade --force -u root -p
sudo systemctl restart mariadb

2. 백업 습관

# 전체 데이터베이스 백업
sudo mysqldump --all-databases > /backup/mariadb_$(date +%Y%m%d).sql

# 시스템 테이블만 백업
sudo mysqldump mysql > /backup/mysql_system_$(date +%Y%m%d).sql

3. 버전 확인

# MariaDB 버전 확인
mysql --version

4. 정기적인 로그 모니터링

# cron으로 매일 로그 확인 자동화
echo "0 9 * * * journalctl -u mariadb --since '1 day ago' | grep ERROR" | crontab -

결론

mysql.column_stats 테이블 오류는 MariaDB 버전 간 스키마 불일치로 인해 발생하며, mysql_upgrade 명령어로 간단히 해결할 수 있습니다.

핵심 포인트:

  • MariaDB 업그레이드 후 반드시 mysql_upgrade 실행
  • 정기적인 백업으로 안전성 확보
  • 로그 모니터링으로 조기 발견

이러한 관리 습관을 통해 데이터베이스를 안정적으로 운영할 수 있습니다.

댓글

알짜게시판

리눅스 Apache에서 GPTBot·Amazonbot·AhrefsBot의 게시판 이미…
기타 Midjourney, DALL·E, ChatGPT에서 Y2K 파스텔 UI 프롬프…
리눅스 Cloudflare R2 자동 업로드 구성하기. 특정 폴더에 파일…
워드프레스 워드프레스 7.0 관리자 링크 색상 변경 후 이전 색상으…
워드프레스 캐시 환경에서 AJAX 댓글(코멘트) 분리로 서버 응답시간…
리눅스 아파치 일반 계정 파일 접근 권한 설정과 mod-ruid2 적…
델파이 Delphi IDE 메인 폼 안열림 dproj 설정으로 해결
개발팁 VSCode 한국어 설정법, Configure Display Language로 U…
기타 RustDesk 자체 서버 구축으로 공용 서버 로그인 문제 해…
리눅스 Dante SOCKS5 프록시 서버 구축 및 설정
윈도우 윈도우 실행파일(exe) 서비스 등록 자동화 쉽게 하는 방…
기타 CLIProxyAPI Windows 설치 가이드
워드프레스 그누보드7 데이터를 WordPress WXR로 변환하기
기타 Ollama 설치 경로 C드라이브 고정 문제 해결 및 드라이…
개발팁 Apache Access Log 기반 도메인별 방문자 카운터 구현
윈도우 ZImage AI 이미지 생성 환경 구축 방법
윈도우 파일 복사 후 실행 배치파일 - 에러 감지 포함
개발팁 네이버 검색 Open API
개발팁 네이버 검색광고 키워드 도구 API 검색
열람 개발팁 MariaDB column_stats 테이블 오류 해결 방법
개발팁 PHP-FPM 에러 로그 실시간 모니터링
윈도우 윈도우11 업데이트 후 네트워크 드라이브 접근 불가 문…
개발팁 다국어 번역 함수 구현 방법
워드프레스 "치명적인 오류가 발생했습니다" 디버깅 가이드
리눅스 Apache 웹 로그 분석하기 – awk와 GoAccess 활용
윈도우 윈도11 강제업데이트 피하고 윈도10 계속 쓰기
리눅스 PHP 파일 업로드 용량 늘리기
개발팁 애드센스 충돌 문제 해결하기
파이썬 Python Playwright로 Edge 브라우저 제어하기
델파이 TDirectory.Delete 대신 CMD 으로 폴더 삭제