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 실행
  • 정기적인 백업으로 안전성 확보
  • 로그 모니터링으로 조기 발견

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

Comments

Tips & Tech

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