SQLB : SQL Load Balancer安装试用
SQLB : SQL Load Balancer安装试用Submitted by tim on 2007, August 12, 4:13 PM. LAMP
[url]http://www.phpec.com/?action=show&id=34[/url]
SQLB是一个开源的数据库连接池,可以有效地提高数据库的性能,支持oracle,mysql,postgreSQ,虽然最后更新已是四年前,但仍是一个不错的选择...
1.下载
SQLB是c/s结构,其中的C部分提供PHP及perl等接口,源代码及相关需求可在以下地址下载:
[url]http://sqlb.sourceforge.net/frameset.html[/url]
2.安装(本文以支持mysql为例,安装SQLB前,请先安装好MYSQL)
a.安装sqlb的server端
tar -zxvf sqlb-2.4.8.taz
cd sqlb-2.4.8
./configure --with-mysql-libs=/path-to-mysql/lib/ --with-mysql-includes=/path-to-mysql/include/
make
make install
#注,configure时,要指定mysql的lib和include目录
安装完成后,要建立sqlb用户,并将源码中的conf/sqlb.conf拷至用户目录:
adduser -g nobody sqlb
chmod 770 ~sqlb/
cp ./conf/sqlb.conf ~sqlb/sqlb.conf
chown sqlb. ~sqlb/sqlb.conf
#sqlb.conf为sqlb的运行配置文件,编辑此文件加入数据库连接参数
至此,可以执行sqlb start启动sqlb了
#如果你编译时指定了prefix将sqlb安装到其它目录,请使用完整路径,要在开机自动运行,将源码中的init/sqlb.init复制到 /etc/init.d/sqlb.init(不能改名成sqlb),修改其中$sqlb_prefix指向你sqlb安装路径,再运行以下命令加入:
chkconfig --add sqlb.init
service sqlb.init start //启动
service sqlb.init stop //停止
#如果启动时提示找不到libmysqlclient.so.15,你需要将此文件(一般在mysql的lib目录)复制至PATH路径中(如:/usr/lib)
3.安装sqlb php 模块
sqlb的客户端可以编译进php内置模块,也可以编译成动态模块加载(so),方法如下:
先解压:
tar -zxvf sqlb-php-module-1.6.tgz
cd sqlb-php-module-1.6
a.静态编译
将源码目录的sqlb目录复制至php源码的ext目录,执行./buildconf
完成后,执行./configure --help|grep sqlb,你可以看到相关信息,此时你可以重新编译PHP,并使用--with-sqlb=/path-to-sqlb来加入sqlb支持,
b.动态模块
在sqlb目录下,执行:
phpize #如果提示无此命令,你可以加上完整路径(在php安装目录的bin下)
./configure --with-sqlb=/path-to-sqlb --with-php-config=/path-to-php/bin/php-config
make
make install
注意:sqlb本身不支持php5,所以在make时会出错,提示类似
sqlb.c:42: error: `BYREF_NONE' undeclared here (not in a function)
需要简单修改一下sqlb的源码,打开sqlb.c,定位到42行
注释掉42行,并将ZEND_FE的第二参数改为NULL
原代码:
static unsigned char argument_type[] = { 5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_NONE };
zend_function_entry sqlb_functions[] = {
ZEND_FE(accelsqlb, argument_type)
{NULL, NULL, NULL}
修改成:
C++代码
//static unsigned char argument_type[] = { 5, BYREF_NONE, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_NONE };
zend_function_entry sqlb_functions[] = {
ZEND_FE(accelsqlb, NULL)
{NULL, NULL, NULL}
经此修改,就可顺利make && make install了
完成后,会生成一个sqlb.so文件,将它加入php.ini的extension中
安装好后,查看phpinfo(),可以看到sqlb的支持已被加入了....
4.php连接测试
sqlb只提供一个方法
PHP代码
$result =accelsqlb($query, $db_name, $db_type, $state,[$timeout])
其中:
$query为要执行的sql语句
$db_name为要连接的数据库名
$db_type为数据库类型,此处为mysql
$state为执行完成状态码
$timeout为超时设置
state : return value of the function :
-2 : timeout occured
-1 : sqlb error
0 : SQL error
1 : SQL query OK with resultset
2 : SQL query OK with empty resultset
("No row selected")
3 : SQL query OK without resultset (DELETE, UPDATE,...)
所有返回结果可以通过查看$result获得,如果$state的值为1,则$result结果为:
array(
字段数n
n个字段名
第一条记录n个值
第二条记录n个值
..
)
其它返回方式请自行测试 |