본문 바로가기
프로그램 (PHP,Python)

mysql+php connection pooling sqlrelay

by 날으는물고기 2010. 2. 2.

mysql+php connection pooling sqlrelay

참조
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=25928
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=36317

mysql+php 환경에서 db pool로 알려진 sqlrelay 를 설치하여 테스트 해보는게 이문서의 목적이다.

다운로드
rudiments : http://sourceforge.net/projects/rudiments/
sqlrelay :
http://sourceforge.net/projects/sqlrelay/

현재 버젼 : rudiments-0.30.tar.gz, sqlrelay-0.38.tar.gz

다음 설치 환경은 각각 다를수 있기 때문에 주의 하시길..
또한 작업은 root 로 한다는 가정하에 적는다.
우선 /home/tmp 폴더에 rudiments-0.30.tar.gz, sqlrelay-0.38.tar.gz 두화일을 올려둔 다음..

1. rudiments 설치
sqlrelay 를 사용하기 위한 C 라이버리라고 생각하면 된다.
# tar xvfz rudiments-0.30.tar.gz
# cd rudiments-0.30
# ./configure
# make
# make install
/usr/local/firstworks 에 설치됨...

2. sqlrelay 설치
# tar xvfz sqlrelay-0.38.tar.gz
# cd sqlrelay-0.38
# ./configure --enable-small-code --enable-mysql-rpath --enable-php-rpath --with-php-ext-dir=/php확장모듈dir
# make
# make install
configure 중 --with-php-ext-dir 옵션이 필요한 이유는 sqlrelay 가 PHP의 확장모듈 형태로 설치하기 때문이다.
make install 후 php확장 모듈 dir 를 살펴보면 sql_relay.so 라는 모듈이 만들어진걸 확인할수 있다

3. sqlrelay 설정 및 시작
# cd /usr/local/firstworks/
# vi etc/sqlrelay.conf
=====================================================================================================
<?xml version="1.0"?>
<!DOCTYPE instances SYSTEM "sqlrelay.dtd">
<instances>

        <instance id="mysqlrelay" port="9000" socket="/tmp/mysql_relay.socket" dbase="mysql" connections="3" maxconnections="5" maxqueuelength="0" growby="1" ttl="60" endofsession="commit" sessiontimeout="600" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass">
                <users>
                        <user user="mysqlrelay" password="mysqlrelaypass"/>
                </users>
                <connections>
                        <connection connectionid="mysqlrelay" string="host:localhost;user=MysqlUser;password=MysqlUserPass;db=MysqlDB;port=3306;socket=/home/tmp/mysql.sock" metric="1"/>
                </connections>
        </instance>

</instances>
=====================================================================================================
:wq
sqlrelay.conf 설정화일 설명
instance id="mysqlrelay" 는 mysqlrelay 라는 id 로 sqlrelay로 접속하는것을 의미한다.
port="9000" 은 mysqlrelay 가 실행되는 port 이며 php에서 접속시에 이용된다.
socket="/tmp/mysql_relay.socket" 은 sqlrelay 의 socket 위치이다.
dbase="mysql" 는 DB명을 의미하며 사용할수 있는 DB는 sqlrelay.dtd 에 정의되어 있다
connections="3" 은 초기 연결갯수를 의미하며 sqlrelay 를 실행시키면 프로세서가 3개가 실행된다는걸의미
maxconnections="5" 는 최대 연결갯수를 의미한다.
user="mysqlrelay" 는 php가 sqlrelay 에접속할 userid를 의미한다.
password="mysqlrelaypass"는 php가 sqlrelay 에 접속할 userid 의 패스워드를 의미한다.
string="host:localhost;user=MysqlUser;password=MysqlUserPass;db=MysqlDB;port=3306;socket=/home/tmp/mysql.sock"
string 부분은 sqlrelay 가 mysql 에 접속하는 환경을 설정하는곳이다.
개인별로 환경이 다르기때문에 이부분에 주의 하기 바란다.
처음에 어려웠던 부분이 instance 와 connection 의 차이를 몰라 한참을 1시간동안 삽질을 했었다.
알고 보면 아무것도 아니겠지만 ... TT
sqlrelay.conf 화일에 mysql 접속관련 패스가 있으므로 chmod 로 권한을 조정하는걸 잊지말자..

위에서언급한 것 외에도 여러가지가 있지만 정확히 무엇을 의미하는지는 아직 잘모르겠다
하단에 언급한 html 문서를 보면서 앞으로 참고를 해야할 부분이다.

# vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/firstworks/bin 를 이와같이 수정한다.
# vi /usr/local/apache/conf/php.ini <== 각자 환경이 다를수 있다
만약 php.ini 화일의 위치를 모른다면.. phpinfo() 함수를 찍어보길 바란다.
php.ini 화일 하단에 "extension = sql_relay.so" 를 추가한후 저장한다
# sqlr-start -id mysqlrelay <== mysqlrelay instance id 를 실행시킨다. 참고로 instance id는 설정화일에서
여러개를 만들수 있다. sqlrely를 죽이려면 # sqlr-stop -id mysqlrelay 하면된다. # sqlr-stop 을 실행하면
여러개의 instance id 를 모두 죽이는 것이다.
# /usr/local/apache/bin/apachectl restart <== 아파치 재시작
이제 환경은 모두 구축된것이다.

4. php에서의 sqlrelay 접속
아래의 php 코드를 넣어서 테스트 하길바란다.
<?php
//dl("sql_relay.so");
$con = sqlrcon_alloc("localhost", 9000, "", "mysqlrelay", "mysqlrelaypass", 0, 1);
$cur = sqlrcur_alloc($con);

if(!sqlrcur_sendQuery($cur, "select * from test_t1")) {
        echo sqlrcur_errorMessage($cur);
        echo "\n";
}
sqlrcon_endSession($con);
for($row=0; $row<sqlrcur_rowCount($cur); $row++) {
        for($col=0; $col<sqlrcur_colCount($cur); $col++) {
                echo sqlrcur_getField($cur,$row,$col);
                echo ",";
        }
        echo "\n";
}
sqlrcur_free($cur);
sqlrcon_free($con);
?>
이제 정상적으로 실행되는것을 볼수 있을것이다.
php api 관련된것은 sqlrelay 소스 dir 밑에 doc 를 보시면 html문서로 상세하게 나와있다. 


출처 : http://blog.naver.com/donisio
728x90

댓글