MySQL 4.1 Update From 4.0
이 문서는 mysql 4.1 미만의 버전에서 업그레이드를 할 경우만 참고 하시기 바랍니다.
이 문서는 mysql 4.0 에서 mysql 4.1 로 업데이트를 위한 문서이다. 이 문서는 다른
배포본에서도 동일하게 적용을 할 수 있다.
4.1 에서 5.0 으로 업데이트 시, mysql_fix_privilege_tables 만 실행해 주면 된다.
4.0 에서 5.0 으로의 업데이트는 4.1 로 업데이트를 한 후에, 5.0 으로 가는 것을 권
장한다.
이 문서로 발생하는 피해에 대해서는 보증을 하지 않습니다. 꼭 작업 전에 데이터를
백업 하신 후에 시도 하십시오 !!!
4.0.x 에서 업데이트를 하기 전에 mysql database 의 포맷이 ISAM (3.x 에서 만든 것
을 그대로 가져다 사용했을 경우) 이라면, mysql database 의 포맷을 MYISAM 으로 변
경을 해야 한다. ISAM 으로 되어 있는지 확인을 하려면 /var/lib/mysql/mysql 에서
ls *.ISM 을 실행했을 때, 결과가 나온다면 ISAM format 으로 되어 있는 것이다. 만약
ISM 파일이 존재 한다면 업데이트 전에,
shell> mysql_fix_privilege_tables --password=DB패스워드
명령을 실행하여, MyISAM 으로 변경을 한 후에, 다음의 작업을 진행 하도록 한다. 이
명령을 실행할 때 나오는 에러 메세지들은 무시해도 상관이 없다.
!주의!
업데이트 전에 모든 database 의 dump 를 받아 놓으십시오. 업데이트 후에, 해당 데
이터베이스들의 data 를 dump 받은 것으로 다시 넣어 주어야 합니다. 4.1 에서 덤프
를 받으면 field size 가 반으로 줄어 버리기 때문에 꼭 업데이트 전에 덤프를 받아
놓으셔야 합니다.
대충 mysqldump -F -n --add-drop-table DBNAME > DBNAME.dump 와 같이 받으면 됩
니다.
1. mysql 4.1 update
4.0 에서 업데이트를 할 경우에는, /etc/my.cnf 를 다른 이름으로 변경한 후에,
하기 바란다. 4.1 의 my.cnf 와 호환이 되지 않기 때문에, rpm 으로 업데이트를
할 경우 /etc/my.cnf 가 업데이트가 되지 않을 수 있기 때문이다. 그러므로, 꼭
이름을 바꾸어 놓고, 업데이트 후에, 새로 만들어진 my.cnf 를 재 설정하여 사용
하여야 한다.
pkgadd -F mysql*
명령으로 간단하게 업데이트가 가능하다. 주의할 것은 * 문자를 사용하기 위해서
는 실행을 하는 current directory 에 mysql 로 시작하는 파일이 있으면 안된다.
안녕이 아닌 배포본에서는 알아서 업데이트를 하도록 한다. 기존의 data 는 그대
로 두면 된다. 다음 섹션에서 migration 을 하는 방법을 제공한다.
업데이트 완료 후에, /etc/my.cnf 의
[client]
password = MYSQL_ROOT_PASSOWRD
설정을 해 놓은 후에, my.cnf 의 퍼미션을 600 으로 설정을 한다. 그리고, system
의 charset 이 EUC-KR 일 경우에는 my.cnf 에
init_connect = 'set names euckr'
설정이 되어 있는지 확인한 후에, 없으면 설정을 하도록 한다. 안녕의 mysql 에는
기본으로 제공을 한다.
2. mysql database migration
업데이트를 완료한 후에, mysql 을 재시작 하면, 에러 로그에 다음과 같은 메세지
를 확인할 수 있다.
[root@work home]# tail -f /var/log/mysql/error.log
050601 1:04:24 [Warning] './mysql/host' had no or invalid character set,
and default character set is multi-byte, so character column sizes
may have changed
050601 1:04:24 [Warning] './mysql/user' had no or invalid character set,
and default character set is multi-byte, so character column sizes
may have changed
050601 1:04:24 [Warning] './mysql/db' had no or invalid character set,
and default character set is multi-byte, so character column sizes
may have changed
050601 1:04:24 [Warning] mysql.user table is not updated to new password
format; Disabling new password usage until mysql_fix_privilege_tables
is run
050601 1:04:24 [Warning] Can't open and lock time zone table: 테이블
'mysql.time_zone_leap_second' 는 존재하지 않습니다. trying to live
without them
050601 1:04:24 [Warning] './mysql/tables_priv' had no or invalid character
set, and default character set is multi-byte, so character column
sizes may have changed
050601 1:04:24 [Warning] './mysql/columns_priv' had no or invalid character
set, and default character set is multi-byte, so character column
sizes may have changed
050601 1:04:24 [Warning] './mysql/func' had no or invalid character set,
and default character set is multi-byte, so character column sizes
may have changed
이 문제를 fix 하기 위하여, mysql 은 mysql_fix_privilege_tables 라는 명령을 제
공한다. mysql 이 실행되어 있는 상태에서 다음의 명령을 실행한다.
[root@work home]# mysql_fix_privilege_tables --password=MYSQL_ROOT_PASSWORD
This script updates all the mysql privilege tables to be usable by
MySQL 4.0 and above.
This is needed if you want to use the new GRANT functions,
CREATE AGGREGATE FUNCTION, or the more secure passwords in 4.1
done
상단과 같이 done 메세지가 나오면 fix 된 것이다.
3. database 의 table 의 charset 문제
아래의 방법을 사용할 수도 있으나, multibyte 를 사용하는 db 의 경우 필드 값이
반으로 줄어 버리는 문제가 있다. 그러므로, 앞서 받아놓은 dump 파일로 데이터를
다시 밀어 넣도록 한다. 밀어 넣는 방법은
mysql db_name < dumpfile
와 같이 할 수 있다.
하단은 그냥 참고로 남겨 놓는다.
-------
4.0 에서 4.1 로 업데이트를 한 후에, 최초의 table 접근 시에 error.log 에 다음
과 같은 에러 메세지를 만나게 된다.
[root@work home]# tail -f /var/log/mysql/error.log
050601 1:04:30 [Warning] './guestbook/oops' had no or invalid character
set, and default character set is multi-byte, so character column
sizes may have changed
위의 로그는 guestbook database 의 oops table 에 관한 로깅이다.
이 메세지는 mysql 4.0 의 모든 테이블들이 latin1 문자셋으로 생성이 되었으나,
4.1 부터는 기본적으로 utf8 로 관리를 하도록 변경이 되어 발생하는 문제이다.
그냥 사용하는데 크게 지장은 없으나, sort 등에는 문제의 소지가 있다. mysql 에
로그인을 하여 다음과 같은 명령으로 fix 할 수 있다.
[root@work home]# mysql guestbook
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.12-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> alter table oops convert to character set utf8
지정할 charset 은 무조건 utf8 로 하면 된다.
만약 table 이 많다면, mysql -e 명령을 이용하여 shell script 를 만들어 처리할
수도 있으며, 또는 php 의 mysql extension 같은 것을 이용해도 무방하다.
4. 암호 문제 해결
mysql 4.1 에서는 grant 또는 password 함수를 사용할 경우 4.0 의 암호 체계와는
다른 방식을 사용한다. 물론 기존 4.0 에서 사용하던 data 의 암호들은 그대로 이
다.
문제의 소지는 4.1 로 업데이트 한 후에 실행되는 grant 의 identified 나 password
함수는 새로운 암호 체계를 사용하기 때문에 php 나 다른 언어의 mysql 관련 라이
브러리의 접속 method 로는 접근이 불가능하게 된다.
그러므로, php 의 경우에는 mysqli extension 과 같이 mysql 4.1 전용 extension
을 사용해야 한다.
만약, mysqli extension 을 사용할 수 없는 경우, 즉 mysql 은 4.1 로 올렸는데,
php 는 mysqli extension 을 제공하지 않는 php4 를 사용해야 하는 경우나, 또는
기존의 프로그램들이 mysql extension 을 사용하고 있고, 수정하기에는 너무 양이
많을 경우에는 my.cnf 에서 identified 나 password 함수를 예전의 방식대로 사용
할 수 있도록 다음의 설정을 제공한다. my.cnf 에 다음의 설정을 추가한다.
old_passwords = 1
이 설정은 grant 문의 identified 나 password 함수를 예전 버전의 방식으로 작동
하도록 한다. 임시로 이렇게 처리를 할수 있으나, 최종적으로는 새로운 암호화 방
식을 사용할 수 있도록 수정을 하는 것이 좋다.
|