开源的数据库池连接代理服务器:SQL Relay
SQL Relay是个功能强大并且非常容易使用的持久数据库连接池系统,能够运行在Unix/Linux系统下,能够支持大部分主流的数据库系统和大部分的编程语言,有效的减轻服务器的负载和移植问题,是很多Web应用数据库连接池的一个选择。
SQL Relay 是适合于Unix/Linux下的一个持久数据库连接池,代理服务器和负载平衡系统。
SQL Relay的特点:
- 快速的执行数据库驱动的Web应用
- 增强的可测性数据库驱动的Web应用
- 分配数据库的访问连接
- 关闭数据库的访问连接
- 从不支持的平台访问数据库
- 从一个数据库到另一种数据库移植应用
SQL Relay支持的数据库系统:
|
|
|
|
SQL Relay 客户端API支持一些高级的数据库操作,例如绑定变量、多记录获取、客户端结果的缓存和支持事务等。
SQL Relay 的客户端API支持的编程语言有:
|
|
|
SQL Relay 给下面的数据库抽象层提供驱动支持:
|
|
|
|
SQL Relay 的支持:
- 命令行客户端
- 一个GUI的配置工具
- 丰富的文档
[ 相关链接 ]
- 官方网站:http://sqlrelay.sourceforge.net
- 文档支持:http://sqlrelay.sourceforge.net/documentation.html
- PHP API编程指南:http://sqlrelay.sourceforge.net/sqlrelay/programming/php.html
- PHP API参考手册:http://sqlrelay.sourceforge.net/sqlrelay/api/php/doc.html
- PEAR DB API编程指南:http://sqlrelay.sourceforge.net/sqlrelay/programming/phppeardb.html
- 安装配置:http://blog.csdn.net/heiyeshuwu/archive/2006/05/12/726082.aspx
* Oracle
* MySQL
* mSQL
* PostgreSQL
* Sybase
* MS SQL Server
* IBM DB2
* Interbase
* Sybase
* SQLite
* Lago
* ODBC
* MS Access
三、安装和配置;
不说废话了,开始安装SQL Relay,到 http://sqlrelay.sourceforge.net/ 去下载相应的软件
安装SQL Relay需要先安装Rudiments, 在 http://sqlrelay.sourceforge.net/download.html 可以找到
1、安装Rudiments:
# tar vxzf rudiments-0.28.2.tar.gz
# cd rudiments-0.28.2
# ./configure --prefix=/usr/local/rudiments
# make
# make install
至此,rudiments安装结束
2、安装SQL Relay:
# tar vxzf sqlrelay-0.36.4.tar.gz
# cd sqlrelay-0.36.4
# ./configure --prefix=/usr/local/sqlrelay --with-rudiments-prefix=/usr/local/rudiments --with-mysql-prefix=MySQL安装路径 --with-freetds-prefix=FreeTDS安装路径 --with-oracle-home=Oracle安装路径 --with-php-prefix=PHP安装路径
# make
# make install
安装结束,以上编译参数根据个人需要来设定,因为我同时需要Oracle SQLserver MySQL,所以才加了这么多参数的
3、设置PHP:
修改php.ini
extension_dir = "./"
把以上内容修改为:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922"
根据PHP安装的路径来修改,并不是每个版本的PHP都是这个路径
在php.ini中添加如下内容
extension=sql_relay.so
接下来,介绍SQL Relay如何连接SQL Server
修改FreeTDS的配置文件freetds.conf
加入如下内容:
[msde]
host = 172.16.20.203
port =1433
tds version = 8.0
client charset = GB2312
请根据个人需求来修改
4、修改SQL Relay的配置文件
# cd /usr/local/sqlrelay/etc
# cp sqlrelay.conf.example sqlrelay.conf
把sqlrelay.conf的内容改为:
<?xml version="1.0"?> <!DOCTYPE instances SYSTEM "sqlrelay.dtd"> <instances> <instance id="msdetest" port="9000" socket="/tmp/msdetest.socket" dbase="freetds" connections="5" maxconnections="10" maxqueuelength="0" growby="1" ttl="60" endofsession="commit" sessiontimeout="5" runasuser="nobody" runasgroup="nobody" cursors="5" authtier="listener" handoff="pass"> <users> <user user="sa" password="sa"/> </users> <connections> <connection connectionid="msdetest" string="server=msde;db=pubs;user=sa;password=sa;" metric="1"/> </connections> </instance> </instances>
四、启动SQL Relay,并测试;
1、启动 SQL Relay
# export PATH=$PATH:/usr/local/sqlrelay/bin
# sqlr-start -id msdetest
2、使用SQL工具:
# sqlrsh -id msdetest
可以直接输入SQL语句
停止SQL Relay:
# sqlr-stop msdetest
3、测试PHP:
写一个PHP文件,内容如下:
<? $con=sqlrcon_alloc("msdetest",9000,"/tmp/msdetest.socket","sa","sa",0,1); $cur=sqlrcur_alloc($con); sqlrcur_sendQuery($cur,"select * from t_gifts"); for ($row=0; $row<sqlrcur_rowCount($cur); $row++) { for ($col=0; $col<sqlrcur_colCount($cur); $col++) { echo sqlrcur_getField($cur,$row,$col); echo ","; } echo "<br>\n"; } sqlrcur_free($cur); sqlrcon_free($con); ?>
执行这个PHP文件,看看能不能出现数据