## 모든 명령어는 mysql 이 설치된 디렉토리를 기준으로 합니다.
## 4.1 버전에선 /usr/local/mysql-4.1 이 되겠죠..
두번째까지 아무 문제없이 업그레이드가 됐다면 이제 mysql 사용자로
실행되는 mysql 4.0 버전이 기본소켓인 /tmp/mysql.sock 과 기본포트
3306 으로 실행되고 있을겁니다.
물론 정상적으로 업그레이드 했으면 이전 3.23 버전은 삭제해도
되겠죠...
이제 4.0 -> 4.1 버전으로 업그레이드한 얘기를 해야겠네요..
4.1 에서는 많은부분이 바꼈습니다... 고대하던 서브쿼리 기능이
드뎌 추가됐군요..
[4.1 버전의 특징]
1. 서브쿼리 가능
2. INSERT ... ON DUPLICATE KEY
UPDATE ... syntax
( insert 시 이미 존재하면 update 함, replace 와 달리
원하는 필드만 update 가능 )
3. unicode 지원 (내부적으로 unicode 사용..)
4. 문자셋 지원 확장 (DB, Table , Column 별로
지정가능)
5. HEAP table 에서의 BTREE index
(range scan 가능.. 그전까진 HASH index 라서 = 연산밖에
못했음..)
6. create table1 like table2 syntax 지원
7. help 명령어 확장
8. user 테이블 password 64비트로 확장
(이전 DB를 복사,이동하는 경우 mysql_fix_privilege_tables
를 실행해야 한다.)
가장 주목되는 부분이 서브쿼리 지원이 아닌가 싶습니다.. 기다리고
기다리던 기능이죠.. ^^;;
웹의 특성상(물론 웹이 아니라 다른 모든 프로그램에서도
마찬가지겠지만...) 여러번의 쿼리로 질의하던것을 한번의 쿼리로
해결할 수 있다면 엄청난 속도향상이 있겠죠..
또한 mysql 시스템 내부적으로 unicode 를 사용합니다. 즉 DB 명,
테이블명 등을 모두 유니코드로 저장한다는 것이죠.. 그래서
유니코드에서 사용할 수 있는 대부분의 문자들로 DB 이름이나 테이블
이름을 정할 수 있습니다...
standard ascii 가 아닌 캐릭터로 DB 나 테이블을 생성,사용할때는
이름을 (`) 로 감싸주시는게 좋습니다. (탭키 위에있는 ` 입니다.)
일단 설치는 앞서 4.0 을 설치할 때와 마찬가지로 설치를 합니다..
mysql2 계정으로 포트와 소켓을 달리주고 설치, 실행하시면 됩니다.
이때 주의해야 할점은 default-character-set
을 꼭 설정해 주셔야 한다는 것입니다. 백업과 복원시에
별도 표기가 없을때는 서버의 기본 글자셋을
따라가게 됩니다. 그러므로 기본 글자셋을 지정해 주지 않으면
초기세팅인 latin1 을 기준으로 모든것이 설정됩니다.
/bin/mysqld_safe 실행시에
--default-character-set=euckr 을 지정해 주시거나
(4.1 부터 한글글자셋 명칭이 euc_kr 에서
euckr 로 변경되었습니다.)
mysql 4.1 의 datadir 에 my.cnf 파일을
생성하여 [mysqld] 섹션에서 default-character-set=euckr 을
지정하거나 mysql2 의 홈디렉토리에
.my.cnf 파일을 두고 그속에 [mysqld] 섹션에서
default-character-set=euckr 을 지정해주는 방법이
있습니다..
MyISAM 형식의 테이블을 그냥 복사해서 옮길수도 있고 Dump &
Restore 하는 방법도 있는데..
제가 두가지를 모두 해본 결과 두가지의 결과가 다른것을
발견했습니다..
4.1 버전부터는 CHAR(4) 라고 하면 4 Byte 가
아니라 캐릭터셋에 따라 글자수 4자까지로 지정됩니다.
즉 2 byte 문자에서는 8 byte 가 되고 1 byte
문자에서는 4 byte 가 할당됩니다.
이전 버전의 MyISAM 테이블을 그냥 복사,이동하였을 때는
varchar(10) 이던것이 varchar(5) 로 모두 변경되어 있는것을 볼 수
있었습니다... (물론 데이터는 손실없었습니다. 저장공간 크기는 똑같은
10 byte 니까요..)
Dump & Restore 했을때는 varchar(10) 이던것이 그대로
varchar(10) 으로 되더군요.. (아마 덤프된 sql 구문에 create table
문을 그대로 쓰기 때문인것 같습니다.) 그런데 이때는 결과적으로 20
byte 가 할당되기 때문에 데이타파일의 크기가 커진 것을 볼 수
있었습니다.
char(10) 과 같은 고정크기인 경우는 두배로 커지겠지만 varchar(10)
처럼 가변크기를 사용한 경우는 두배까지 커지진 않고 대략 1.5배 정도
커진것 같습니다.
데이타의 손실은 없으나 추후 입력시
varchar(5) 가 되어버리면 영어건 한글이건 5글자까지만 입력되더군요..
아마 글자셋에 따라 글자수를 계산하는것
같습니다.
그러니 4.1로 이전할땐 꼭 Dump
& Restore 하시기 바랍니다.
데이타를 옮기기 전에 설치와 글자셋 설정이 제대로 되었는지 확인을
해야겠지요?
./bin/mysql --socket=/tmp/mysql2.sock
-uroot -p
mysql>status
먼저 글자셋 설정이 제대로 되었는지 확인하시기 바랍니다.
---------------------------< 결과
>-----------------------------
Server version: 4.1.10-standard-log
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: euckr
Client characterset: euckr Conn. characterset:
latin1
UNIX socket: /tmp/mysql2.sock
----------------------------------------------------------------
여전히 server 와 conn 은 latin1 으로 설정되어 있습니다.
이 부분의 자동설정에 관해서는 인터넷에서 여러 방면으로 검색을
했지만 만족할만한 해결책이 없었습니다. 아래와 같이 해결하는 수밖에
없는것 같습니다.
mysql > set names euckr
이제 status 를 보시면 모든 캐릭터셋이 euckr 로 변경되어
있습니다.
이렇게 서버와 클라이언트의 글자셋을 맞춰줘야 정확한 데이타의
입력이 가능합니다..
서버와 클라이언트가 서로 다른 글자셋으로 되어 있다면 서로 다른
말로 대화하는 것과 같습니다.
mysql > show variables like
'c%'
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_client | euckr |
| character_set_connection | euckr |
| character_set_database | euckr |
| character_set_results | euckr |
| character_set_server | euckr |
| character_set_system | utf8 |
| character_sets_dir |
/usr/local/mysql-4.1.10/share/mysql/charsets/ |
| collation_connection | euckr_korean_ci |
| collation_database | euckr_korean_ci |
| collation_server | euckr_korean_ci |
| concurrent_insert | ON |
| connect_timeout | 5 |
+--------------------------+-----------------------------------------------+
위 화면에서와 같이 글자셋을 맞추셨으면 설치는 완료입니다.. 이제
DB 를 이전하면 됩니다.
앞서 말씀드린바와 같이 복사해서 옮기는 것과 Dump 로 옮기는 것에
차이가 있습니다. Dump 방법은...
[4.0 - Dump] ./bin/mysqldump -uroot -p
mydatabase > mydatabase.sql
/bin/mv ./mydatabase.sql
/usr/local/mysql-4.1/
[4.1 - Restore] ./bin/mysql
--socket=/tmp/mysql2.sock --default-character-set=euckr -uroot -p mydatabase
< mydatabase.sql
mysql 접속에서 default-character-set 설정을 해주지 않으면 서버는
euckr 인데 클라이언트는 latin1 이 되어버립니다.. 꼭 지정해 주셔야
합니다!!
4.1 이상 버전을 사용하실때는 꼭
캐릭터셋을 확인하시기 바랍니다.
mysql 테이블을 그냥 복사하셨다면 mysql_fix_privilege_tables 를 실행해주셔야
합니다. 그래야 4.1 에서 추가된 기능들을 사용하실 수 있습니다.
에디터로 mysql_fix_privilege_tables 스크립트를 보시면 맨
상단에
user,password,socket 등을 입력할 수 있게 되어있으니 새로
설치한 환경에 맞게 변경하시고
./bin/mysql_fix_privilege_tables
--basedir=/usr/local/mysql-4.1
로 실행하시면 권한테이블의 수정이 이루어집니다.
에러가 나면 --verbose 옵션으로 에러원인을 살펴보시고
조치하세요.
mysql_fix_privilege_tables 스크립트는
서버를 실행한채로 사용하셔야 합니다. (이넘이 mysql 에
접속해서 sql 을 실행하는 스크립이네요..)
|