国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > Discuz > 正文

Discuz X3 mysql數據庫主從同步 讀寫分離

2024-09-11 09:02:42
字體:
來源:轉載
供稿:網友

在 Discuz! X版本 程序里面內置了讀寫分離的功能,方便了一些負載比較大的站點使用來降低一定的負載.

Discuz! X 默認未開啟此功能,需要在配置文件中做相應的修改此功能才會開啟生效。

在配置開啟讀寫分離的之前需要在服務器上先配置好 mysql 的主從下面介紹一下讀寫分離的配置:

讀寫分離只需要在 ./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'] = '';  //以逗句分離的表名,表示此處設置的表僅從主服務器讀寫, 不使用從服務器讀取 

在程序中每個入口文件都會先執行 $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); 

此方法中判斷了 非 $_config['db']['common']['slave_except_table']  中設置的表及 為 SELECT 查詢語句時使用從庫的連接從從庫查詢數據,其他則用默認的使用主庫.

如果在使用過程中有發現一些異常,或者想控制相關的 sql 語句讀取的數據庫,可以嘗試在此方法中判斷 $sql 的語句內容 來指定其需要讀的主庫還是從庫.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安义县| 镇赉县| 格尔木市| 水城县| 靖边县| 新建县| 星座| 嫩江县| 皮山县| 漯河市| 阳西县| 大宁县| 建德市| 峡江县| 文登市| 措勤县| 射洪县| 兴宁市| 大竹县| 新巴尔虎右旗| 成武县| 安国市| 抚松县| 盐城市| 隆化县| 寿光市| 额尔古纳市| 道孚县| 房产| 昌黎县| 工布江达县| 通许县| 隆尧县| 芜湖县| 利津县| 任丘市| 师宗县| 福鼎市| 滦南县| 永定县| 申扎县|