오라클에서 ODBC를 이용한 MySQL으로 DB LINK 설정 2

오라클에서 ODBC를 이용한 MySQL으로 DB LINK 설정 2


MySQL 서버에 Gateway를 설치하지 않고 ODBC 드라이버만 이용하는 경우



테스트 환경



오라클 DB 서버


Oracle Linux 6.9

Oracle 11gR2 - 11.2.0.4

ODBC Driver 8.0.11 (홈페이지에서 받아서 설치, https://dev.mysql.com/downloads/connector/odbc/)

캐릭터셋 - KO16MSWIN949

ip - 192.168.0.55



MySQL DB 서버


CentOS 7.2

MySQL 5.7 (yum 설치)

캐릭터셋 - euckr

ip - 192.168.0.44

Database - MYSQL



오라클 서버에서 설정



버전에 맞는 ODBC 드라이버를 받아서 yum으로 설치하면 /etc/odbc.ini, /etc/odbcinst.ini 파일이 보인다.


vi로 odbcinst.ini 열어보면


[MySQL ODBC 8.0 Unicode Driver]

Driver = /usr/lib64/libmyodbc8w.so

UsageCount = 1


[MySQL ODBC 8.0 ANSI Driver]

Driver = /usr/lib64/libmyodbc8a.so

UsageCount = 1



이 것이 MySQL 연결에 사용될 드라이버 인데, 주의할점은 각 DB의 캐릭터 셋에 맞춰 드라이버를 설정해줘야 한다.

UTF8를 사용할 것이라면 Unicode 드라이버를, EUCKR을 사용할 것 이라면 ANSI를 선택해야 한다.



# vi /etc/odbc.ini


[MYSQL]

Driver = /usr/lib64/libmyodbc8a.so

trace = off

port = 3306

server = 192.168.0.44

database = MYSQL

option = 2

user = DEMO

password = PASSWORD

charset = euckr



$ vi tnsnames.ora


MYSQL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.55)(PORT = 1521))

      (CONNECT_DATA = (SID = MYSQL))

      (HS = OK)

  )


$ isql -v MYSQL 

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

SQL>


이렇게 나오면 일단 MySQL DB로 원격접속이 되는것이다.


※ 사전에 MySQL 서버의 방화벽을 내린다거나, MySQL 계정에 원격접속 가능한 권한을 줘야 한다.


오라클 자체 적으로 HS 파라미터를 설정해야 한다.


$ cd $ORACLE_HOME/hs/admin

$ vi initMYSQL.ora (initXXXX.ora)    <-- [아래 HS_FDS_CONNECT_INFO = XXXX 의 XXXX 부분과 동일 하게 설정]


# This is a sample agent init file that contains the HS parameters that are

# needed for the Database Gateway for ODBC


#

# HS init parameters

#

HS_FDS_CONNECT_INFO = MYSQL      <-- [해당부분은 접속 하고자하는 MySQL DB 명 입력]

HS_FDS_SHAREABLE_NAME = /usr/lib64/libmyodbc8a.so      <-- [사용하고자 하는 ODBC 드라이버]

HS_FDS_TRACE_LEVEL = OFF                <--[접속은 되는데 결과값이 안나온다면 255 로 설정해 trace 확인]

HS_FDS_SUPPORT_STATISTICS = FALSE

HS_LANGUAGE=AMERICAN_AMERICA.KO16MSWIN949     <--[Oracle 서버쪽 DB의 캐릭터셋]

HS_RPC_FETCH_REBLOCKING = OFF

HS_KEEP_REMOTE_COLUMN_SIZE = ALL

HS_NLS_LENGTH_SEMANTICS = VARCHAR                  <-- [VARCHAR or CHAR 등으로 환경에 맞게 설정 가]

HS_FDS_TIMESTAMP_MAPPING = DATE

HS_NLS_NCHAR=UCS2


#

# ODBC specific environment variables

#

set ODBCINI=/etc/odbc.ini


#

# Environment variables required for the non-Oracle system

#


오라클 리스너에 HS 리스너를 추가해준다.

$ vi $ORACLE_HOME/network/admin/listener.ora

# listener.ora Network Configuration File: oracle/product/11.2.0/tg_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

 (SID_LIST =

   (SID_DESC =

     (SID_NAME=MYSQL)

     (ORACLE_HOME=/oracle/product/11.2.0/db_1)

     (PROGRAM=/oracle/product/11.2.0/db_1/bin/dg4odbc)

     (ENVS=LD_LIBRARY_PATH = /usr/lib:/usr/lib64:/oracle/product/11.2.0/db_1/lib:/oracle/product/11.2.0/db_1/hs/lib)

   )

 )

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.55)(PORT = 1521))

     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

   )

 )


ADR_BASE_LISTENER = /oracle/product/11.2.0/db_1


$ lsnrctl start


LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 27-JUL-2018 11:35:58


Copyright (c) 1991, 2013, Oracle.  All rights reserved.


Starting /oracle/product/11.2.0/tg_1/bin/tnslsnr: please wait...


TNSLSNR for Linux: Version 11.2.0.4.0 - Production

System parameter file is /oracle/product/11.2.0/tg_1/network/admin/listener.ora

Log messages written to /oracle/product/11.2.0/tg_1/diag/tnslsnr/MYSQL/listener/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1192.168.0.44)(PORT=1521)))

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.44)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production

Start Date                27-JUL-2018 11:35:58

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /oracle/product/11.2.0/tg_1/network/admin/listener.ora

Listener Log File         /oracle/product/11.2.0/tg_1/diag/tnslsnr/MYSQL/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.44)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Services Summary...

Service "MYSQL" has 1 instance(s).

  Instance "MYSQL", status UNKNOWN, has 1 handler(s) for this service...

Service "ora11g" has 1 instance(s).

  Instance "ora11g", status READY, has 1 handler(s) for this service...

Service "ora11gXDB" has 1 instance(s).

  Instance "ora11g", status READY, has 1 handler(s) for this service...

The command completed successfully



오라클 서버에서 tnsping을 실행 했을때



$ tnsping mysql


TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 27-JUL-2018 11:19:40

Copyright (c) 1997, 2013, Oracle.  All rights reserved.

Used parameter files:


/app/oracle/product/11.2.0.4/db_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias


Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.55)(PORT = 1521)) (CONNECT_DATA = (SID = MYSQL)) (HS = OK))

OK (0 msec)


나오면 접속 준비가 완료



ORACLE DB의 SCOTT 계정에서 DB LINK TEST


DB LINK 생성 


※ DB Link를 생성하고자하는 계정에 create database link 권한을 주고 작업한다.


$ sqlplus scott/tiger



SQL> create database link mysql

connect to DEMO

IDENTIFIED BY "<password>"

USING 'MYSQL';


MySQL DB에 미리 만들어 놓은 DEMO 테이블을 조회 해본다.


※ 테스트용 계정과 테이블은 알아서 만드시길... DEMO 유저의 DEMO 테이블을 조회 했다.


SQL> select * from "demo"@mysql_test;


      col1 col2       col3 col4     col5

---------- ---------- ---------- ---------- --------------------

1 24-JUL-18  0123456789 0123456789 30313233343536373839

2 25-JUL-18  0123456788 0123456788 30313233343536373838


결과 값이 나오면 성공

오라클에서 ODBC를 이용한 MySQL으로 DB LINK 설정

오라클에서 ODBC를 이용한 MySQL으로 DB LINK 설정



테스트 환경



오라클 DB 서버


Oracle Linux 6.9

Oracle 11gR2 - 11.2.0.4

ODBC Driver 8.0.11 (홈페이지에서 받아서 설치, https://dev.mysql.com/downloads/connector/odbc/)

캐릭터셋 - KO16MSWIN949

ip - 192.168.0.55



MySQL DB 서버


CentOS 7.2

MySQL 5.7 (yum 설치)

Oracle Gateway 11gR2 - 11.2.0.4

캐릭터셋 - euckr

ip - 192.168.0.44

Database - MYSQL



오라클 서버에서 설정


버전에 맞는 ODBC 드라이버를 받아서 yum으로 설치하면 /etc/odbc.ini, /etc/odbcinst.ini 파일이 보인다.


vi로 odbcinst.ini 열어보면


[MySQL ODBC 8.0 Unicode Driver]

Driver = /usr/lib64/libmyodbc8w.so

UsageCount = 1


[MySQL ODBC 8.0 ANSI Driver]

Driver = /usr/lib64/libmyodbc8a.so

UsageCount = 1


이 것이 MySQL 연결에 사용될 드라이버 인데, 주의할점은 각 DB의 캐릭터 셋에 맞춰 드라이버를 설정해줘야 한다.

UTF8를 사용할 것이라면 Unicode 드라이버를, EUCKR을 사용할 것 이라면 ANSI를 선택해야 한다.



# vi /etc/odbc.ini


[MYSQL]

Driver = /usr/lib64/libmyodbc8a.so

trace = off

port = 3306

server = 192.168.0.44

database = MYSQL

option = 2

user = DEMO

password = PASSWORD

charset = euckr



$ vi tnsnames.ora


MYSQL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.44)(PORT = 1521))

      (CONNECT_DATA = (SID = MYSQL))

      (HS = OK)

  )



$ isql -v MYSQL 

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

SQL>


이렇게 나오면 일단 MySQL DB로 원격접속이 되는것이다.


※ 사전에 MySQL 서버의 방화벽을 내린다거나, MySQL 계정에 원격접속 가능한 권한을 줘야 한다.




MySQL 서버에서의 설정


MySQL은 기호에 맞게 설치하면 되고, 오라클 Gateway를 설치한다. 오라클 GUI 설치 할때와 같은 환경으로 맞춰서 설치한다.


# groupadd oinstall

# groupadd dba

# useradd -g oinstall -G dba oracle

# su - oracle



$ vi .bash_profile


export ODBCINI=/etc/odbc.ini

export ORACLE_HOME=/oracle/product/11.2.0/tg_1

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/lib64:/lib

export PATH=$ORACLE_HOME/bin:$PATH


GUI에서 gateway를 설치할때 


ODBC 부분을 체크 해서 설치 해준다. (해당 스샷은 설치 후 캡처를 위해 다시 창을 띄운거라 reinstall 이라고 나옴)


Gateway 설치 후 HS 파라미터를 설정해야 한다.


$ cd $ORACLE_HOME/hs/admin



$ vi initMYSQL.ora (initXXXX.ora)    <-- [아래 HS_FDS_CONNECT_INFO = XXXX 의 XXXX 부분과 동일 하게 설정]


# This is a sample agent init file that contains the HS parameters that are

# needed for the Database Gateway for ODBC


#

# HS init parameters

#

HS_FDS_CONNECT_INFO = MYSQL      <-- [해당부분은 접속 하고자하는 MySQL DB 명 입력]

HS_FDS_SHAREABLE_NAME = /usr/lib64/libmyodbc8a.so      <-- [사용하고자 하는 ODBC 드라이버]

HS_FDS_TRACE_LEVEL = OFF                <--[접속은 되는데 결과값이 안나온다면 255 로 설정해 trace 확인]

HS_FDS_SUPPORT_STATISTICS = FALSE

HS_LANGUAGE=AMERICAN_AMERICA.KO16MSWIN949     <--[Oracle 서버쪽 DB의 캐릭터셋]

HS_RPC_FETCH_REBLOCKING = OFF

HS_KEEP_REMOTE_COLUMN_SIZE = ALL

HS_NLS_LENGTH_SEMANTICS = VARCHAR                  <-- [VARCHAR or CHAR 등으로 환경에 맞게 설정 가능]

HS_FDS_TIMESTAMP_MAPPING = DATE

HS_NLS_NCHAR=UCS2


#

# ODBC specific environment variables

#

set ODBCINI=/etc/odbc.ini


#

# Environment variables required for the non-Oracle system

#



Oracle Gateway를 이용해서 MySQL 서버에 오라클 Listener를 띄운다.

$ vi $ORACLE_HOME/network/admin/listener.ora

# listener.ora Network Configuration File: /oracle/product/11.2.0/tg_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME=MYSQL)
      (ORACLE_HOME=/oracle/product/11.2.0/tg_1)
      (PROGRAM=/oracle/product/11.2.0/tg_1/bin/dg4odbc)
      (ENVS=LD_LIBRARY_PATH = /usr/lib:/usr/lib64:/oracle/product/11.2.0/tg_1/lib:/oracle/product/11.2.0/tg_1/hs/lib)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.44)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


ADR_BASE_LISTENER = /oracle/product/11.2.0/tg_1


$ lsnrctl start

$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 27-JUL-2018 11:35:58

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Starting /oracle/product/11.2.0/tg_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /oracle/product/11.2.0/tg_1/network/admin/listener.ora
Log messages written to /oracle/product/11.2.0/tg_1/diag/tnslsnr/MYSQL/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1192.168.0.44)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.44)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                27-JUL-2018 11:35:58
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/11.2.0/tg_1/network/admin/listener.ora
Listener Log File         /oracle/product/11.2.0/tg_1/diag/tnslsnr/MYSQL/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.44)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "MYSQL" has 1 instance(s).
  Instance "MYSQL", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully



오라클 서버에서 tnsping을 실행 했을때


$ tnsping mysql


TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 27-JUL-2018 11:19:40


Copyright (c) 1997, 2013, Oracle.  All rights reserved.


Used parameter files:

/app/oracle/product/11.2.0.4/db_1/network/admin/sqlnet.ora



Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.44)(PORT = 1521)) (CONNECT_DATA = (SID = MYSQL)) (HS = OK))

OK (10 msec)



나오면 접속 준비가 완료




ORACLE DB의 SCOTT 계정에서 DB LINK TEST


DB LINK 생성 

※ DB Link를 생성하고자하는 계정에 create database link 권한을 주고 작업한다.


$ sqlplus scott/tiger


SQL> create database link mysql

connect to DEMO

IDENTIFIED BY "<password>"

USING 'MYSQL';



MySQL DB에 미리 만들어 놓은 DEMO 테이블을 조회 해본다.

※ 테스트용 계정과 테이블은 알아서 만드시길... DEMO 유저의 DEMO 테이블을 조회 했다.


SQL> select * from "demo"@mysql_test;


      col1 col2       col3 col4     col5

---------- ---------- ---------- ---------- --------------------

1 24-JUL-18  0123456789 0123456789 30313233343536373839

2 25-JUL-18  0123456788 0123456788 30313233343536373838



결과 값이 나오면 성공이다.




MySQL DB 생성 및 계정 생성

우선 root 로 접속을 합니다.


$ mysql -u root -p

enter password:


DB 생성

MYSQL> CREATE DATABASE IF NOT EXISTS db_name;

계정 생성

MYSQL> GRANT USAGE ON *.* TO 사용자ID@접속호스트 IDENTIFIED BY "패스워드"

권한 부여

MYSQL> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON db_name.* TO 사용자ID@접속호스트;
MYSQL> FLUSH PRIVILEGES;

MYSQL> exit


$ mysql -u 계정 -p
enter password:


정상적으로 생성 되었나 확인해 봅니다.


MYSQL> show databases;

MYSQL> use database;

MYSQL> show table status;

MYSQL> select * from db where user = "계정";
MYSQL> select * from user where user = "계정";


RHEL 기반 5.8 64bit APM 소스 설치와 OCI8 연동

벌써 몇번째 APM 설치 글을 올리는지 모르겠네요.

최신 버전은 워낙 에러가 많아서 삽질에 삽질을 거듭했습니다.


RHEL, CentOS, Oracle Linux Server 5.8 64 bit 버전에서 설치는 32bit 버전과 좀 차이가 있어서 여러가지 문제가 있습니다.

일단 APM이 32비트 기반이라서 말이죠.

아파치도 그렇고, php도 그렇고 최신버전들은 설치도 잘 안되고, 아직까지도 각종 애플리케이션에서 지원도 잘 안되고 말이죠.

가장 안정적인 버전으로 설치를 진행 하도록 하겠습니다.


설치 환경

OS - Oracle Linux Server 5.8 64bit

MySql - 5.5.28

Apache - 2.2.23

PHP - 5.2.8

Zend Optimizer - 3.3.3



APM설치를 위한 사전 요구사항

필수 패키지 설치
# yum -y install pcre-devel lua-devel libxml2-devel ncurses-devel zlib zlib-devel curl openssl openssl-devel libtermcap-devel libc-client-devel bison gcc g++ cpp gcc-c++ freetype freetype-devel freetype-utils gd gd-devel libjpeg libjpeg-devel libpng libpng-devel curl curl-devel flex php-mbstring libexif-devel cmake



Apache 설치를 위한 패키지 설치


소스설치 전에 APM관련 패키지가 yum 업데이트를 통해 설치가 되어 있을수도 있는데, yum erase 나 rpm -e 명령으로 설치된 패키지를 삭제 해줍니다.

apr, apr-util, mysql, httpd, php, php-common 삭제.


# cd /usr/local/src

# wget http://mirror.apache-kr.org//apr/apr-1.4.6.tar.gz
# tar xvfz apr-1.4.6.tar.gz
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr-1.4.6
# make && make install

# wget http://mirror.apache-kr.org//apr/apr-util-1.5.1.tar.gz
# tar xvfz apr-util-1.5.1.tar.gz
# cd apr-util-1.5.1
# ./configure --prefix=/usr/local/apr-util-1.5.1 --with-apr=/usr/local/apr-1.4.6
# make && make install



MySQL 설치 (cmake 설치)


MySQL 만 최신 버전을 사용하는 이유는 역시 5.5 버전이 5 버전대 보다 성능이 월등히 뛰어나기 때문입니다.


 - 설치 위치 : /usr/local/mysql-5.5.28
 - 데이타 위치 : /mysql/data

1. MySQL (http://www.mysql.com/downloads/mysql/)
  # cd /usr/local/src/
  # tar xvfz mysql-5.5.28.tar.gz


2. User 및 디렉토리 생성
  # adduser -M -s /bin/false mysql
  # mkdir -p /mysql/data /mysql/log
  # chown mysql.mysql data
  # chown mysql.mysql log


3. 소스 컴파일
  - 운영상의 편의성을 위해 설치 경로명에 버전을 같이 명기
  - 설치 옵션은 http://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.5/en/source-configuration-options.html 참조
  - CharSet 관련 설정은 http://dev.mysql.com/doc/refman/5.5/en/extended-show.html 참조

  # cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.28 -DMYSQL_DATADIR=/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
  # make && make install


만약 언어셋을 eucKR을 사용한다면, cmake 옵션에서 변경해줍니다.

-DDEFAULT_CHARSET=euckr -DDEFAULT_COLLATION=euckr_korean_ci


4. 심볼릭 링크 생성
  # ln -s /usr/local/mysql-5.5.28 /usr/local/mysql


5. 환경 설정
  1) 권한 설정
  # cd /usr/local
  # chown -R mysql.mysql ./mysql-5.5.28
  # chown -R mysql.mysql /mysql
  2) 스크립트 구동
  # cd /usr/local/mysql
  # ./scripts/mysql_install_db --user=mysql --datadir=/mysql/data


6. my.cnf
  1) 시스템 메모 크기에 따른 /usr/local/mysql/support-file 밑에 아래 설정 화일을 /etc/my.cnf 로 복사합니다.
  - 64M 이하 : my-small.cnf
  - 65M ~ 256M : my-medium.cnf
  - 512M : my-large.cnf
  - 1G ~ 2G : my-huge.cnf
 
  2) my.cnf를 시스템에 맞게 설정한다.

7. 구동
  1) MySQL server 구동
  # cp -av /usr/local/mysql-5.5.28/support-files/mysql.server /etc/init.d/mysqld
  # /etc/init.d/mysqld start

  2) 암호 설정
  # ./bin/mysqladmin -u root password <new-password> (<- 괄호없이 비번만 입력)
 
  3) 접속 테스트
  # mysql -p mysql
  mysql> 나오면 성공


8.  자동 구동 설정
  # vi /etc/rc.d/init.d/mysqld
  - 아래 부분 수정
  basedir=/usr/local/mysql
  datadir=/mysql/data
 

 # chkconfig --add mysqld



Apache 설치

1. Apache (http://httpd.apache.org/download.cgi)

 /usr/lib/libexpat.so 을 lib64에서 심볼릭 링크를 줍니다. 기존에 있는건 삭제. 이건 64bit에서만 설정해주는 거죠.
 

  # ln -s /lib64/libexpat.so.0.5.0 /usr/lib/libexpat.so


  # cd /usr/local/src/httpd-2.2.23

  # ./configure --prefix=/usr/local/httpd-2.2.23 --enable-so --with-mpm=prefork --enable-cache --with-apr=/usr/local/apr-1.4.6 --with-apr-util=/usr/local/apr-util-1.5.1 --enable-ssl --with-ssl=/usr --enable-rewrite --enable-lib64 --libdir=/usr/lib64
  # make && make install
  # ln -s /usr/local/httpd-2.2.23 /usr/local/apache2


   - 여기 사용된 옵션은 아파치 웹 서버의 성능을 높히기 위한 것으로써 아래 문서를 참고.
    http://httpd.apache.org/docs/2.4/mod/worker.html
    http://httpd.apache.org/docs/2.4/mod/mod_cache.html


 mpm 옵션에 prefork 와 worker 를 선택할수가 있는데, worker 는 멀티 CPU에서 성능이 좋고, prefork는 싱글 CPU에서 성능이 좋습니다.

 각각 장단점이 있는데 그건 나중에...


2. mod_url : 1.6.2.6 설치 (최신 버전은 컴파일 과정에서 에러남)
  # wget http://caos.kldp.net/frs/download.php/6015/mod_url-apache2-1.6.2.6.tar.bz2
  # bzip2 -d mod_url-apache2-1.6.2.6.tar.bz2
  # tar -xvf mod_url-apache2-1.6.2.6.tar
  # /usr/local/httpd-2.2.23/bin/apxs -aic mod_url.c
  그러면 아파치 모듈 디렉토리 (/usr/local/httpd-2.2.23/modules)에 설치됩니다. (755 권한)
  아파치 설정 파일 httpd.conf에 아래 부분이 이미 추가되어 있습니다.


  LoadModule redurl_module        modules/mod_url.so
  그 하단에 추가
 
  <IfModule mod_url.c>
          CheckURL On
  </IfModule>



PHP 설치

PHP설치에 앞서 라이브러리를 인식시키는 작업을 합니다.

  # echo "/lib" >> /etc/ld.so.conf
  # echo "/lib64" >> /etc/ld.so.conf
  # echo "/lib" >> /etc/ld.so.conf
  # echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
  # echo "/usr/local/apache/modules" >> /etc/ld.so.conf
  # echo "/usr/lib64" >> /etc/ld.so.conf
  # echo "/usr/local/lib64" >> /etc/ld.so.conf
  # ldconfig

php설치시에 iconv에러가 발생되기 때문에 iconv만 따로 컴파일 작업을 진행해줘야 하죠.

  # wget mirror.koreaidc.com/library/libiconv-1.13.tar.gz
  # tar xvfz libiconv-1.13.tar.gz
  # cd libiconv-1.13
  # ./configure && make && make install

심볼릭 링크
  # ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2 (32비트 일때)
  # ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/libiconv.so.2 (64비트 일때)


PHP 다운로드 및 설치

    # tar xvfz php-5.2.8.tar.gz
  # cd php-5.2.8
  # ./configure --prefix=/usr/local/php-5.2.8 --with-mysql=/usr/local/mysql-5.5.28 --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/apache2/conf --with-png-dir=/usr/lib64 --with-zlib-dir=/usr/lib64 --with-gdbm=/usr/lib64 --with-iconv=/usr/local --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-gettext --with-imap --with-imap-ssl --with-kerberos --with-curl --with-zlib --with-gd --enable-exif --enable-wddx --enable-magic-quotes --enable-calendar --enable-sockets --enable-ftp --enable-bcmath --enable-mbstring --enable-mbregex --enable-sigchild --enable-mod-charset --with-oci8=$ORACLE_HOME
  # make
  # make install


--with-oci8=$ORACLE_HOME 

  : 오라클과 PHP를 연동하는 옵션인데, root에서 export로 오라클 홈을 지정해주지 않았다면, 오라클이 설치된 경로를 수동으로 지정 해주거나 (ex> /oracle/base/product/11g) 또는 오라클 엔진이 없을 경우는 instance client를 설치해서 설치한 경로를 지정해 줘도 됩니다.


  # cp -a php.ini-recommended /usr/local/apache2/conf/php.ini
  # perl -pi -e "s/register_globals = Off/register_globals = On/g" /usr/local/apache2/conf/php.ini
  # perl -pi -e "s/allow_url_fopen = On/allow_url_fopen = Off/g" /usr/local/apache2/conf/php.ini

  # ln -s /usr/local/php /usr/local/php-5.2.8



ZendOptimizer 설치 (php 가속화)


 Zend 의 경우 3.3.9 버전이 64bit 에서 잘 로딩이 안되는 경우도 많고, 그냥 3.3.3 버전을 설치 합니다.

압축을 풀면 install.sh 스크립트가 있는데 실행 시켜서 경로만 지정해주고 next 하면 알아서 설치가 됩니다.

설치후에 자동으로 아파치를 재구동 해주고, 설치 확인 방법은 아래와 같습니다.


# /usr/local/php/bin/php -v


이걸로 APM 설치는 끝!