PHP 함수의 mysql 데이터베이스 확장 함수의 고찰
PHP에서 지원하는 mysql 함수
- mysql
- mysqli
- pdo-mysql
습관
난 몇년동안 리눅스상에서 APM을 설치할때
- mysql을 컴파일해서 설치하고
- php설치시 ”–with-mysql=/usr/local/mysql” 등의 옵션을 사용했다.
--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql (필요시 추가)
형태로 설치한뒤 추가로 mysqli가 필요한 경우 별도의 모듈형태로 mysqli 를 설치해서 사용했다..
특별히 큰 이유가 있었던것은 아니고, 그냥 mysql3 + php4.0 시절부터 그렇게 해왔기 때문에 의례 그렇게 했다는게 맞다.
새로운것
헌데 PHP5.3 부터 변경된점중.. mysqlnd 라는것이 있다.
출처 : http://php.net/manual/en/book.mysqlnd.php
위에서 설명한 mysql의 3가지 지원함수의 사용을 위해서
- mysql 라이브러리 (컴파일이든 yum, apt 를 이용한 클라이언트/라이브러리 설치)
- php컴파일시 libmysqlclient 를 사용
해야 했던 전통적인 방식대신
mysql Native Driver 라는 새로운 방식을 php-5.3 부터 지원하게 되었다고… (솔직히 몰랐다;;;;)
- 라이센스 문제(라기 보다는 주체랄까..) 해결
- libmysqlclient 라이브러리가 더이상 필요 없음
- 같은 얘기지만 내장되어있는 기능을 활성화 시키는 것이기 때문에 설치가 쉽다.
- PHP의 메모리 관리 시스템의 사용하기 때문에 성능개선(이 있을수 있다..)
라는 장점이 있다…
소스컴파일의 경우 설치되는 프로그램(컴파일된 바이너리 파일을 통칭…)이 설치당시 참조했던 라이브러리에 대한 절대적인 의존성을 갖게 되는데
이렇게 자체드라이버를 사용하게 되면, 적어도 libmysqlclient 에 대해서는 자유로워지게 되는것을 의미한다.
이것이 무엇을 의미하냐고???
바로 mysql5.1 + php5.3(이상)을 쓰다가..
mysql5.5 또는 mariadb10.0 으로 변경을 하더라도 PHP를 재컴파일할 필요가 없게 된다는것!!!!
이리저리 이점이 있기 때문에 앞으로는 mysqlnd 를 사용하기로 전격 결정했다.
설치법
기존 mysql, mysqli, pdo-mysql 에 대한 정의 부분은 모두 무시하고
아래 컴파일 옵션을 사용하면된다.
--enable-mysqlnd \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \
phpinfo
mysqlnd
mysqlnd | enabled |
---|---|
Version | mysqlnd 5.0.11-dev – 20120503 – $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $ |
Compression | supported |
core SSL | supported |
extended SSL | supported |
Command buffer size | 4096 |
Read buffer size | 32768 |
Read timeout | 31536000 |
Collecting statistics | Yes |
Collecting memory statistics | Yes |
Tracing | n/a |
Loaded plugins | mysqlnd,debug_trace,auth_plugin_mysql_native_password, auth_plugin_mysql_clear_password,auth_plugin_sha256_password |
API Extensions | mysqli,pdo_mysql,mysql |
mysql
MySQL Support | enabled |
---|---|
Active Persistent Links | 0 |
Active Links | 0 |
Client API version | mysqlnd 5.0.11-dev – 20120503 – $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $ |
mysqli
MysqlI Support | enabled |
---|---|
Client API library version | mysqlnd 5.0.11-dev – 20120503 – $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $ |
Active Persistent Links | 0 |
Inactive Persistent Links | 0 |
Active Links | 0 |
pdo_mysql
PDO Driver for MySQL | enabled |
---|---|
Client API version | mysqlnd 5.0.11-dev – 20120503 – $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $ |
이런식으로다가 mysqlnd 가 활성화된 것을 볼 수 있다.