Apache通过mod_dbd可以直接连接以下的数据库:
MySQL
PostgreSQL
Oracle
也可以通过ODBC连接其他数据库。
具体步骤:
1.安装mod_dbd模块(apsx mod_dbd.c 具体方法另行说明)
2.配置文件设定(httpd.conf)
DBDriver pgsql(我的是pgsql数据库)
DBDParams "host=localhost port=5432 user=XXX password=XXX dbname=XXX"
DBDPersist ON
DBDKeep 3
DBDMax 10
DBDMin 1
DBDExptime 60
3.重新启动Apache
如果Apache正常启动的话,那么恭喜你,数据库可以用了(废话,呵呵)
如果不能启动的话,那就悲剧了。下面我说一下如何让悲剧变成喜剧啊!
如果出现了,DBD: Can't load driver file apr_dbd_pgsql.so这个错,那说明你Apache的lib里面没有安装apr_dbd_pgsql.so。别不相信, 打开apache/lib/apr-util-1,你发现里面有apr_dbd_sqlite.so,但是没有我们想要的*.so,为什么呢?
因为Apache默认的是使用 sqlite数据库。如果想使用我们需要的数据库怎么办?
答案,修改配置文件掰!
打开源代码的
httpd-2.2.6/srclib/apr-util/
# ./buildconf(执行以下这个文件,接着当前目录下的include中会多出一个apu.h来)
打开
# vi include/apu.h
把你想要的数据库改称1,
#define APU_HAVE_MYSQL 0 ---〉 #define APU_HAVE_MYSQL 1
接着安装Apache,apr_dbd_sqlite.so就会被安装了。
假如你已经安装了Apache,也不用卸载重新安装,只需把apr_dbd_sqlite.so添加安装一下就行了。
具体做法:
1.添加apr
# cd ../apr
# ./configure --prefix=/usr/local/apache2 --with-mysql=/usr/local/mysql
# make
# make install
2.添加apr-util
# cd ../apr-util
# ./configure --prefix=/usr/local/apache2 /
--with-mysql=/usr/local/mysql /
--with-apr=/usr/local/apache2
# make
# ls -la dbd (确认一下apr_dbd_mysql.o是不是生成了)
# make install
ok,在重新启动Apache试试。
另外可能会碰到 Internal error: DBD: Can't connect to pgsql 这种错误
具体解决办法是修改mod_dbd.c,让他把详细信息打出来
修改范围内容,
-- modules/database/mod_dbd.c (revision 609791)
+++ modules/database/mod_dbd.c (working copy)
[at] [at] -459,6 +459,7 [at] [at]
apr_pool_t *rec_pool, *prepared_pool;
ap_dbd_t *rec;
apr_status_t rv;
+ const char *err = "";
rv = apr_pool_create(&rec_pool, pool);
if (rv != APR_SUCCESS) {
[at] [at] -502,12 +503,12 [at] [at]
return rv;
}
- rv = apr_dbd_open(rec->driver, rec->pool, cfg->params,
&rec->handle);
+ rv = apr_dbd_open_ex(rec->driver, rec->pool, cfg->params,
&rec->handle, &err);
if (rv != APR_SUCCESS) {
switch (rv) {
case APR_EGENERAL:
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server,
- "DBD: Can't connect to %s", cfg->name);
+ "DBD: Can't connect to %s: %s", cfg->name,
err);
break;
default:
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server,
重新编译,启动apache,看log,
我遇到过这种错误:
[Mon Jun 20 20:13:16 2011] [error] (20014)Internal error: DBD: Can't connect to pgsql ,FATAL: sorry, too many clients already/n
是因为我的
DBDMax 500
DBDMin 100
设置的太大了,把它改小一点就OK了