Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[求助] 关于Discuz!的多数据库服务器无法处理多前缀的修复方法

[复制链接]
sw08 发表于 2011-10-2 12:52:16 | 显示全部楼层 |阅读模式
本帖最后由 sw08 于 2011-10-2 12:52 编辑

虽然很多站点是单数据库服务器,但是有些大站点用的是多数据库服务器,这里就存在了访问远程数据库的问题。
幸好Discuz!提供了这个功能,只需要把config的配置改下就可以了。
在config文件中,加下类似下面的代码,就可以定义一个新的数据库服务器

  1. //1号数据库服务器
  2. $_config['db']['1']['dbhost']          = 'localhost';        

  3. $_config['db']['1']['dbuser']          = 'root';        

  4. $_config['db']['1']['dbpw']          = 'root';        

  5. $_config['db']['1']['dbcharset']         = 'gbk';        

  6. $_config['db']['1']['pconnect']         = '0';            

  7. $_config['db']['1']['dbname']          = 'discuz1';        

  8. $_config['db']['1']['tablepre']         = 'pre_';
  9. //2号数据库服务器
  10. $_config['db']['2']['dbhost']          = 'localhost1';        
  11. $_config['db']['2']['dbuser']          = 'root';        
  12. $_config['db']['2']['dbpw']          = 'root';        
  13. $_config['db']['2']['dbcharset']         = 'gbk';        
  14. $_config['db']['2']['pconnect']         = '0';            
  15. $_config['db']['2']['dbname']          = 'discuz2';        
  16. $_config['db']['2']['tablepre']         = 'cdb_';

  17. $_config['db']['map']['common_member'] = 2; //这句表明访问common_member表的操作一律从2号数据库服务器中读取
复制代码

但是现在问题来了,当我调试的时候,发现能登陆上2号数据库服务器,但是程序却总是提示数据表不存在。排查了很久,才发现问题出在数据表前缀上。
注意,1号数据库服务器用的是pre_前缀,而二号数据库服务器用的是cdb_前缀。后来我发现把2号数据库的cdb_common_member改成pre_common_member就能成功读取了。
后来我看了下相关的源代码,发现是这个问题,不管你设置了多少个数据库服务器,程序总是把前缀按照1号数据库服务器的值来取,所以导致的这个错误。

经过上午的一个小修补,问题处理掉了……

打开\source\class\class_core.php(警告,这个是Discuz!核心级别的文件,不了解的请不要随意修改)
找到:
  1. return $this->tablepre.$tablename;
复制代码

替换成:
  1. $id = $id ? $id : 1;
  2. return $this->config[$id]['tablepre'].$tablename;
复制代码

就能成功指定其他数据库服务器的前缀了。

评分

2

查看全部评分

eqmz 发表于 2011-10-2 12:54:50 | 显示全部楼层
文章好。。。。。。。。
回复

使用道具 举报

liao427154 发表于 2011-10-2 12:55:00 | 显示全部楼层
支持....................
回复

使用道具 举报

zzsns 发表于 2011-10-2 12:55:10 | 显示全部楼层
谢楼主分享
回复

使用道具 举报

忍者龟 发表于 2011-10-2 12:55:31 | 显示全部楼层
请问高手,能不能实现在同一服务器上两个不同站点共用会员数据的?我怎样做也实现不了
回复

使用道具 举报

sugergao 发表于 2011-10-2 12:56:07 | 显示全部楼层
如同看天书 呵呵
回复

使用道具 举报

 楼主| sw08 发表于 2011-10-2 13:02:05 | 显示全部楼层
本帖最后由 sw08 于 2011-10-2 13:03 编辑
忍者龟 发表于 2011-10-2 12:55
请问高手,能不能实现在同一服务器上两个不同站点共用会员数据的?我怎样做也实现不了

可以的,但是要注意了,你在编程的时候必须要考虑互斥访问的问题。
也就是说,假如某个用户在A站点读帖子,B站点绝对不能有用户在执行编辑该帖子的行为。
回复

使用道具 举报

忍者龟 发表于 2011-10-2 13:07:20 | 显示全部楼层
sw08 发表于 2011-10-2 13:02
可以的,但是要注意了,你在编程的时候必须要考虑互斥访问的问题。
也就是说,假如某个用户在A站点读帖子 ...

两个站点的帖子都是不同的啊。。
回复

使用道具 举报

 楼主| sw08 发表于 2011-10-2 13:10:58 | 显示全部楼层
忍者龟 发表于 2011-10-2 13:07
两个站点的帖子都是不同的啊。。

那就Ucenter处理,搞好通信即可
回复

使用道具 举报

ilei365 发表于 2011-10-2 13:15:33 | 显示全部楼层
前排支持个。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 17:54 , Processed in 0.050015 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表