• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > CMS教程 > discuz教程 >

Discuz!X2 读写分离的配置及分析

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-07点击:
 

Discuz! X版本 程序里面内置了读写分离的功能,方便了一些负载比较大的站点使用来降低一定的负载。

Discuz! X 2.0 默认未开启此功能,需要在配置文件中做相应的修改此功能才会开启生效。

在配置开启读写分离的之前需要在服务器上先配置好 mysql 的主从 具体可以考虑

下面介绍一下 X2 读写分离的配置:

X2的读写分离只需要在 ./config/config_global.php 文件中加入,以下的内容即可

  1. $_config['db']['slave'] = array();  
  2. $_config['db']['slave']['1']['dbhost'] = '10.0.4.162';  //mysql 从库的host  
  3. $_config['db']['slave']['1']['dbuser'] = 'formaster';   //mysql 从库的数据库用户名  
  4. $_config['db']['slave']['1']['dbpw'] = '****';    //mysql 从库的数据库密码  
  5. $_config['db']['slave']['1']['dbcharset'] = 'gbk';  
  6. $_config['db']['slave']['1']['pconnect'] = '0';  
  7. $_config['db']['slave']['1']['dbname'] = 'ultrax'; //mysql从库的数据库名  
  8. $_config['db']['slave']['1']['tablepre'] = 'pre_';  
  9.  
  10.  
  11. //如果有多台从库可以继续添加  
  12. //$_config['db']['slave']['2']['dbhost'] = 'xxx';   
  13. //$_config['db']['slave']['2']['dbuser'] = 'xxxxxx';   
  14. //...  
  15.  
  16. $_config['db']['common']['slave_except_table'] = '';  //以逗句分离的表名,表示此处设置的表仅从主服务器读写, 不使用从服务器读取 

在 X2的程序中每个入口文件都会先执行 $discuz->init(); 在该方法里中调用的 内部方法 _init_db()

  1. function _init_db() {  
  2.         $class = 'db_mysql';  
  3.         if(count(getglobal('config/db/slave'))) {  
  4.                 require_once libfile('class/mysql_slave');  
  5.                 $class = 'db_mysql_slave';  
  6.         }  
  7.         $this->db = & DB::object($class);  
  8.         $this->db->set_config($this->config['db']);  
  9.         $this->db->connect();  

会先 count(getglobal('config/db/slave')) 判断 config_global.php 中是否配置了 slave

如果配置了则会调用 ./source/class/class_mysql_slave.php 文件中的 db_mysql的子类 db_mysql_slave 代替 db_mysql

当程序执行query时 调到 db_mysql_slave 的 query方法

  1. function query($sql, $type = '') {  
  2.         if($this->slaveid && !$this->slaveexcept && strtoupper(substr($sql, 0 , 6)) == 'SELECT') {  
  3.                 $this->slave_connect();  
  4.         }  
  5.         $this->slaveexcept = false;  
  6.         return parent::query($sql, $type);  

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ