RHEL(RedHat Enterprise Linux) 4 Update 2의 Clone인 CentOS 4.2에는 MySQL 4.1.12가 같이 패키징되어 있습니다. 그런데, 아시다시피 MySQL 4.1 버전부터는 내부 구조가 변경이 되어 한글을 사용하는 방법이 꽤 복잡해졌습니다.
그래서, 아예 소스를 가지고 컴파일해서 사용하는 분들이 많은데, 윈도우 버전처럼 my.cnf에 몇 가지 항목을 추가함으로써 RPM 형태로 설치한 MySQL을 사용할 수 있습니다.
단, MySQL이 4.1.15 이상의 버전이 되어야 하며, 이를 위해서 mysql.com에서 SRPM을 받아서 다시 rebuild해야 합니다. 그리고 이것을 가지고 MySQL을 업그레이드하면 됩니다. 4.1.15 이상에서만 적용가능한 옵션 때문에 그렇습니다. 다른 분들이 먼저 올린 글에는 윈도우 버전에만 적용가능한 것으로 되어 있으나, 실제로 CentOS 4.2의 리눅스 환경에서도 동일하게 적용됨을 확인했습니다.
저는 알지보드(http://www.rgboard.com)에서 알지보드 3.1.5를 받아서 설치를 했는데, 자꾸 한글이 깨져서 방법을 찾던 중, 이런 식으로 해결하게 된 것입니다. 실제로 4.1.15 이하에서 한글관련 환경세팅을 한다고 해도, 바뀌질 않았습니다. MySQL에서 변수 부분을 확인하는 쿼리로는 euckr이 적용된 것으로 나와 있으나, 실제 PHP에서 불러내보면 초기세팅값인 latin1로 나옴을 확인할 수 있습니다. 하지만, 위와 같은 방법을 사용하면 해결가능합니다.
방법은 다음과 같습니다.
1. mysql.com에서 해당하는 운영체제의 SRPM을 다운로드한다.
RHEL인 경우, 그에 해당하는 SRPM이 따로 있다. CentOS 등의 RHEL Clone은 RHEL용 SRPM을 받으면 된다. CentOS 4.2의 경우 RHEL 4의 Clone이므로 아래 파일을 다운로드하면 된다.
파일명은 다음과 같다 :
MySQL-standard-4.1.18-0.rhel4.src.rpm
2. MySQL-standard-4.1.18-0.rhel4.src.rpm을 rebuild한다.
다음의 명령을 실행한다 :
rpmbuild --rebuild MySQL-standard-4.1.18-0.rhel4.src.rpm
이렇게 하면 파일이 rebuild된다. 서버의 성능에 따라 시간이 좀 걸릴 수도 있다.. rebuild가 완료되면 /usr/src/redhat/RPMS/i386/ 디렉토리에 다음과 같은 파일이 생성된다.
MySQL-client-standard-4.1.18-0.rhel4.i386.rpm
MySQL-devel-standard-4.1.18-0.rhel4.i386.rpm
MySQL-server-standard-4.1.18-0.rhel4.i386.rpm
MySQL-shared-standard-4.1.18-0.rhel4.i386.rpm
MySQL-standard-debuginfo-4.1.18-0.rhel4.i386.rpm
MySQL-test-standard-4.1.18-0.rhel4.i386.rpm
총 6개의 RPM이 생성된 결과를 확인할 수 있다.
3. MySQL을 업그레이드 한다.
우선 MySQL의 실행을 중지한다.
다음의 명령을 실행한다 :
rpm -Uvh MySQL-client-standard-4.1.18-0.rhel4.i386.rpm MySQL-devel-standard-4.1.18-0.rhel4.i386.rpm MySQL-server-standard-4.1.18-0.rhel4.i386.rpm MySQL-shared-standard-4.1.18-0.rhel4.i386.rpm MySQL-standard-debuginfo-4.1.18-0.rhel4.i386.rpm MySQL-test-standard-4.1.18-0.rhel4.i386.rpm
잘 안될 경우 --force 옵션을 추가하여 다시 실행한다.
rpm -Uvh --force MySQL-client-standard-4.1.18-0.rhel4.i386.rpm MySQL-devel-standard-4.1.18-0.rhel4.i386.rpm MySQL-server-standard-4.1.18-0.rhel4.i386.rpm MySQL-shared-standard-4.1.18-0.rhel4.i386.rpm MySQL-standard-debuginfo-4.1.18-0.rhel4.i386.rpm MySQL-test-standard-4.1.18-0.rhel4.i386.rpm
4. my.cnf 파일을 편집한다.
MySQL의 업그레이드가 끝나면 my.cnf 파일을 편집한다.
다음과 같이 한다 :
[client]
default-character-set=euckr
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=euckr
init_connect=set collation_connection=euckr-korean_ci
init_connect=set names euckr
character-set-server=euckr
collation-server=euckr_korean_ci
character-set-client-handshake = FALSE (이 항목이 4.1.15부터 지원되는 옵션)
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysqldump]
default-character-set=euckr
[mysql]
default-character-set=euckr
5. DB를 다시 시작한다.
이렇게 하면 한글 사용이 가능합니다. 컴파일하거나 /etc/init.d/mysql의 mysqld_safe에 옵션을 추가할 필요가 없습니다. 다른 서버에서 한글 사용이 가능하도록 옵션을 추가하여 컴파일하여 설치해서 사용하던 것을 별도의 덤프 파일을 생성하지 않고 그냥 복사해다가 엎어써도 위의 환경만 맞춰주면 됩니다. 이 경우, character-set-client-handshake 관련 옵션은 없어도 됩니다.
물론, httpd.conf와 php.ini에서도 한글 관련 설정은 같이 맞춰줘야만 합니다.(이 부분은 생략합니다)
궁극적으로는, UTF-8이나 UTF-16으로 가야 한다는 것이 제 소신입니다. 언제까지 이런 식으로 사용해야 하는 지 의문입니다. 당장에 일본어나 중국어 표현에도 문제가 있지 않습니까? 유니코드가 대세이고, 정부에서도 기구축된 데이터베이스에 대해 유니코드화 사업을 하는 마당에, 그 한계가 뻔히 보이는 EUC-KR 코드를 유지할 필요가 없다고 생각합니다.


0