시스템에 사용하던 Apache, PHP, MySQL 을 마이그레이션 (업그레이드)
(존칭은 생략하겠습니다. ^^)

기존 서버 데몬
Apache 2.2.11
PHP 5.2.9
MySQL 5.1.35

현재 서버 데몬

Apache 2.2.14
PHP 5.3.0
MySQL 5.1.40

현재 돌아가는 시스템을 그대로 둔 상태에서 무정지 마이그레이션을 진행하였다. MySQL 경우에는 버전대가 틀릴경우 데이터 저장형식이 변경이 되어 진행시 백업을 받아 두는것이 좋다. 하지만 이 시스템에서는 버전의 차이가 없어 데이터 디렉토리를 그대로 둔 상태에서 데몬만 업그레이드를 하였다.

1. MySQL 컴파일 (최신버전은 2009/11/04일 현재 5.1.40)

기존 설정사항
Data 디렉토리 /data (/dev/sdb2)
바이너리 디렉토리 /usr/local/mysql/
이전 버전과 동일 하게 컴파일을 진행한다 단 기존 데이터 디렉토리는 그대로 둔채 prefix 를 /usr/local/mysql_5.1.40 으로 진행을 한다. 컴파일 옵션은 별다른 특이사항 없이 진행한다.
(컴파일 방법은 prefix만 다르게 하고 이전 MySQL 컴파일 방법 참조)
컴파일을 진행한 후에 mysql_install_db 를 진행하지 않는다.

-1. /etc/init.d/mysql stop (/usr/local/mysql/bin/mysqladmin -u root -p shutdown)
-2. mv /usr/local/mysql /usr/local/mysql_old
-3. ln -l /usr/local/mysql_5.1.40 /usr/local/mysql
-4. /etc/init.d/mysql start
-5. ps axu | grep mysqld

컴파일이 끝난 후에 위와 같은 방식으로 진행을 한다. 이때 두 버전의 차이가 5.1.xx -> 40 차이라면 별다른 문제 없이 서버가 구동이 된후에 잠깐 (1~2초)정도 정지를 할 것이다. 그 후 새로운 버전의 MySQL 가 구동되는것을 확인 할 수 있다. 하지만 5.x.x -> 5.1.40 이라면 데이터를 꼭 백업을 받아야 만일의 사태에 대비 할 수 있다.

2. Apache 컴파일 (최신버전은 2009/11/04일 현재 2.2.14)

컴파일 방법은 기존 컴파일 방식을 참조하고 단 prefix 만 /usr/local/apache_2_2_14 로 한다. prefix 는 기존에 진행하던 Apache 와 겹지지만 않으면 상관없다.
컴파일이 마무리 된 후 httpd.conf 에서 Listen 80 만 다른 포트로 변경을 한다. (테스트 후 원래대로 진행)
기존 httpd.conf (extra/httpd-xxxx.conf)를 원하는 설정값으로 변경을 한다.

3. PHP 컴파일

컴파일 방식은 동일하나 몇가지 틀린점이 있는데 --with-apxs=, --with-mysql, --with-mysqli 등의 옵션은 새롭게 설치한 경로로 설정을 한다. PHP CLI를 사용한다면 --prefix=/usr/local/php_5_3_0 등으로 지정을 하여 기존 PHP와 충돌을 피 할 수 있다. 동일 하게 컴파일을 진행을 한다. 별다른 문제점이 없이 컴파일이 진행이 된다면 httpd.conf에 AddType 을 설정하고 모듈 로드를 확인한다.

4. Apache 시작

이제 새롭게 업그레이드 된 시스템을 확인해봐야 한다 앞서 말한것 처럼 Listen 80 을 변경하여 다른 포트로 진행을 할 것이고 최종 변경전 시스템을 확인하는 것이다.

php.ini 설정 파일 변경

달라진점

php.ini-dest 파일이 존재 하지 않고 php.ini-development , php.ini-production 파일이 존재 한다.

기본적으로 short_open_tag 가 Off 로 되어 있다 <? 으로 시작하는 PHP파일이 존재 한다면 On으로 변경을 시켜준다. (하지만 많은 프로그램들이 <? 으로 시작이 됨으로 On을 해놓음)

[Data] 섹션에서 date.timezone = Asia/Seoul 를 설정하여야 한다. 5.3.0 에서는 date.timezone을 설정하지 않으면 PHP WARNING 이 출력이 된다.

It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier

1. /usr/local/apache_2_2_14/bin/apachectl start
2. 다른포트로 설정된 아파치가 정상적으로 동작하는지 확인한다.
3. /usr/local/apache_2_2_14/bin/apachectl stop
4. mv /usr/local/apache /usr/local/apache_old
5. ln -s /usr/local/apache_2_2_14 /usr/local/apache
6. vi /usr/local/apache/conf/httpd.conf (Listen 80 으로 수정)
7. /usr/local/apache/bin/apachectl start

모든과정이 끝났다.

결론

PHP 5.3.0 가 배포된지 얼마 안되어서 그런지 몰라도 완성도 면에서는 많이 떨어짐을 느꼈다. 컴파일 도중 몇몇 오류 및 phpinfo()시 출력이 안되는 문제 apache 에서 segmentation fault(11) 오류로 인해 PHP파싱이 중단되는 몇가지 문제 등 아직 몇 번의 패치가 나와야 쓸만해질것 같다.

"Linux" 카테고리의 다른 글