Superkkt Blog

MySQL이 버전업이 되면 시스템 테이블의 내용도 달라지는 경우가 있다. 그런데 패키지로 MySQL을 설치하면 버전업시 사용자가 별도로 테이블을 업그레이드하지 않아도 정상적으로 잘 동작을 한다. 이건 패키지가 업그레이드 될때 mysql_upgrade 명령어가 실행되면서 시스템에 설치된 MySQL 버전에 맞도록 모든 데이터베이스 테이블을 업그레이드 해주기 때문이다.

먼저 아래 로그 예제는 MySQL 버전이 서로 다른 서버 사이에서 데이터베이스 파일을 그대로 옮겨서 사용할 때 발생한 것이다.

Aug  2 12:02:47 wiz-1 mysqld: 100802 12:02:47 [ERROR] Column count of mysql.db is wrong. Expected 22, found 20. Created with MySQL 50075, now running 50137. Please use mysql_upgrade to fix this error.
Aug  2 12:02:47 wiz-1 mysqld: 100802 12:02:47 [ERROR] mysql.user has no `Event_priv` column at position 29
Aug  2 12:02:47 wiz-1 mysqld: 100802 12:02:47 [ERROR] Cannot open mysql.event
Aug  2 12:02:47 wiz-1 mysqld: 100802 12:02:47 [ERROR] Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.

기존 서버의 MySQL 버전에서는 mysql.user 테이블에 Event_priv 필드가 없었는데, 새로운 버전에서 추가되어서 문제가 생긴것이다.

그래서 아래와 같이 mysql_upgrade를 사용해서 자동으로 교정을 해준다. 이때 MySQL 서버는 운영 중인 상태로 두어야 한다.

mysql_upgrade -u root --password

그리고나서 MySQL 재시작시켜주면 업그레이드된 테이블의 내용이 반영된다.

참고로 MySQL 재시작 과정에서 아래와 같은 에러 로그가 나온다면 debian-sys-maint 사용자를 등록해줘야한다.

Aug  2 13:45:53 wiz-1 /etc/mysql/debian-start[3827]: /usr/bin/mysqlcheck: Got error: 1045: Access denied for user 'debian-sys-maint'@'localhost' (using password: YES) when trying to connect
Aug  2 13:45:53 wiz-1 /etc/mysql/debian-start[3827]: FATAL ERROR: Upgrade failed

먼저 /etc/mysql/debian.cnf 파일에서 mysql-upgrade 영역에 있는 debian-sys-maint 사용자의 패스워드를 복사한다. 이 예제에서는 TEXSvTrT215CxmAx 이다. 그 다음에 MySQL에 root로 접속해서 아래와 같이 사용자를 등록해준다.

GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'TEXSvTrT215CxmAx' WITH GRANT OPTION;

2010/08/02 14:21 2010/08/02 14:21

trackbacks

trackbacks rss

http://superkkt.com/trackback/568

  1. mysql 모든 디비 복구 및 패키지버전 업그레이드시 시스템 테이블 업그레이드 방법

    Tracked from "Webee - Bastet" 2011/04/23 23:52 D

    디비오류로그 (tail -n200 /usr/local/mysql/data/localhost.err) 보면 깨진 디비의 테이블확인 가능 "Table '[TABLE_NAME]' is marked as crashed and should be repaired" /usr/local/mysql/bin/mysqlcheck -Aao --auto-repair -u root -p mysqld restart 시 localhost.err 에 110423 19:14:25..

Leave a Comment