Discuz X3 mysql数据库主从同步 读写分离
发布:smiling 来源: PHP粉丝网 添加日期:2014-03-31 21:07:05 浏览: 评论:0
在 Discuz! X版本 程序里面内置了读写分离的功能,方便了一些负载比较大的站点使用来降低一定的负载.
Discuz! X 默认未开启此功能,需要在配置文件中做相应的修改此功能才会开启生效。
在配置开启读写分离的之前需要在服务器上先配置好 mysql 的主从下面介绍一下读写分离的配置:
读写分离只需要在 ./config/config_global.php 文件中加入,以下的内容即可:
- $_config['db']['slave'] = array();
- $_config['db']['slave']['1']['dbhost'] = '10.0.4.162'; //mysql 从库的host
- $_config['db']['slave']['1']['dbuser'] = 'formaster'; //mysql 从库的数据库用户名
- $_config['db']['slave']['1']['dbpw'] = '****'; //mysql 从库的数据库密码
- $_config['db']['slave']['1']['dbcharset'] = 'gbk';
- $_config['db']['slave']['1']['pconnect'] = '0';
- $_config['db']['slave']['1']['dbname'] = 'ultrax'; //mysql从库的数据库名
- $_config['db']['slave']['1']['tablepre'] = 'pre_';
- //如果有多台从库可以继续添加
- //$_config['db']['slave']['2']['dbhost'] = 'xxx';
- //$_config['db']['slave']['2']['dbuser'] = 'xxxxxx';
- //...
- $_config['db']['common']['slave_except_table'] = ''; //以逗句分离的表名,表示此处设置的表仅从主服务器读写, 不使用从服务器读取
在程序中每个入口文件都会先执行 $discuz->init(); 在该方法里中调用的 内部方法 _init_db():
- function _init_db() {
- $class = 'db_mysql';
- if(count(getglobal('config/db/slave'))) {
- require_once libfile('class/mysql_slave');
- $class = 'db_mysql_slave';
- }
- $this->db = & DB::object($class);
- $this->db->set_config($this->config['db']);
- $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方法:
- function query($sql, $type = '') {
- if($this->slaveid && !$this->slaveexcept && strtoupper(substr($sql, 0 , 6)) == 'SELECT') {
- $this->slave_connect();
- }
- $this->slaveexcept = false;
- return parent::query($sql, $type);
- }
此方法中判断了 非 $_config['db']['common']['slave_except_table'] 中设置的表及 为 SELECT 查询语句时使用从库的连接从从库查询数据,其他则用默认的使用主库.
如果在使用过程中有发现一些异常,或者想控制相关的 sql 语句读取的数据库,可以尝试在此方法中判断 $sql 的语句内容 来指定其需要读的主库还是从库.
Tags: Discuz X mysql数据库 主从同步
相关文章
- ·Discuz3.1论坛升级问题集(2013-11-15)
- ·升级Discuz3.1时update.php访问出错(2013-11-15)
- ·discuz论坛项目总结(2013-11-15)
- ·怎么让discuz网站版块下面显示版块简介(2013-11-15)
- ·导致Discuz!论坛出现空白页面的一些原因及解决方法简要分析(2013-11-15)
- ·百度discuz结构化数据插件上线 收录有望(2013-11-15)
- ·discuz email 已经被注册的解决办法(2013-11-29)
- ·php中用curl模拟登录discuz以及模拟发帖(2014-01-06)
- ·discuz X3全局变量$_G(2014-01-10)
- ·discuz模板制作过程中的几点总结(2014-01-10)
- ·最新Discuz防灌水的方法和防灌水插件的推荐(2014-01-10)
- ·Discuz论坛 创始人/超级管理员密码忘记解决办法(2014-01-10)
- ·discuz发私信,GBK格式英文或者数字可以显示,中文不显示(2014-03-31)
- ·discuz和jquery冲突暂行解决办法(2014-03-31)
- ·有关discuz在修改过程中的一些配置以及文件位置(2014-03-31)
- ·discuz X3全局变量$_G(2014-03-31)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)