본문 바로가기
DataBase/MySQL

mysql 4.0.x -> mysql 4.1 업그레이드시 오류 해결 방법

by 백룡화검 2008. 7. 9.

예전 업그레이드 관련글에 포함할까 하다가 따로 빼기로 했다.
ubuntu 를 기준으로 설명.
간단한 업그레이드 절차를 살펴보면.
1. 업그레이드 전 데이터 덤프 ( mysqldump --all-databases > db_dump.sql )
2. mysql 서버 업그레이드 ( apt-get install mysql-server-4.1 )
이렇게 업그레이드 후에 오류가 발생해서 실행이 안되는 경우가 있다.
1. /var/log/syslog 를 살펴보면 아래 과 같은 에러메세지가 나올때

mysqld : Character set 'euc_kr' is not a compiled character set is not specified in the ..  .. index.xml
  * 기존 /etc/mysql/my.cnf 의 euc_kr 으로 된 부분을 euckr 로 변경
* 4.0.x 에서는 euc_kr 을 썼는데,  4.1.x 버전 이상은 euckr 으로 쓴다.
* my.cnf 에서 바꾸어 주기만 하면 된다.(euc_kr -> euckr)
* 다시 mysql 서버 시작 하면 정상작동.
2. 다시 로그를 살펴보면. multi-byte
실행은 되었는데, [Warining] 이 무지 많이 보일 경우가 있을 것이다.
{db_name}  had no  or invalid character set, and default character set is multi-byte, so character column sizes may have changed
라는 메세지를 보고, 다음과 같이
alter table {table_name} convert to character set utf8
처럼 복구하면 한글 같은 2byte character 들의 사이즈가 반으로 줄어버리게 된다.
(게다가 저렇게 복구하려면 힘들다. 테이블이 한두개라면 모를까)
이때는 업그레이드 전에 덤프한 데이터를 다시 복구(restore) 하면 된다.(복구하면서 알아서 charset 을 설정)
3. 복구후에 DB를 덤프할때 '화일을 찾지 못했습니다' 에러를 만난다면
mysqldump: Got error: 1017: 화일을 찾지 못했습니다. './{db_name}/{table_name}.frm' (에러번호: 24) when using LOCK TABLES
또는 영어로  Can't find file  , errno: 24

개별적 해당 테이블을 덤프하면 이상이 없다.
이 메세지가 나오는 이유는  이 숫자때문이다.  바로 '1024'
아! 감이 왔나?  mysql 이 한번에 열수 있는 파일이 제한되어 있다.
해당 옵션은  show variables like '%open%' 으로 확인할 수 있다.
바로 open_files_limit  가 1024 로 되어 있을 것이다.
/etc/my.cnf 의 [mysqld] 탭에  open_files_limit=2048  등으로 설정한다.
그런데, 4.0 에서는 이상없이 dump 가 가능하다.
4.0 과 4.1 의 mysqldump 의 내부적으로 다르게 처리하는 듯 하다.
이유를 살펴보니, --lock-tables 라는 옵션때문이다.
4.1 에서 --lock-tables=false 로 옵션을 주고 dump 하면 위의 문제는 없어진다.
lock-tables 옵션을 사용하려면 위의 open_files_limit 를 설정해주어야 한다.(선택은 각자 알아서)


출처 : http://taemy.experlab.com/404