Apache通过mod_dbd连接数据库

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了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值