[MYSQL] MariaDB column_stats 테이블 오류 해결 방법
- 12-06
- 11 회
- 0 건
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실행 - 정기적인 백업으로 안전성 확보
- 로그 모니터링으로 조기 발견
이러한 관리 습관을 통해 데이터베이스를 안정적으로 운영할 수 있습니다.











로그인 후 댓글내용을 입력해주세요