首页
站长论坛BBS
救助
投稿
discuz视频教程
discuz技术支持
版块
登录
快速注册

实现Discuz x论坛 数据库实现读写分离的方法

ARCHY 2015-7-9 [其他] 来自手机 复制链接
634771
discuz使用视频教程
31idc

马上注册,一起探讨正确快速的建站方法

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
最近一直都在处理一些大数据库的discuz论坛,像每天PV达到千万级别,用户访问给数据库带来非常大的压力,导致在网站访问蜗牛一样(推荐结合Discuz静态资源-远程附件、CSS和JS使用cdn加速的方法),那么我们就可以把Discuz x论坛 数据库做读写分离,来减轻数据查询的压力,下面我们先来看看Discuz x论坛 数据库提供的读写分离配置

参考配置文件config_global_default.php,
/**
* 数据库主服务器设置, 支持多组服务器设置, 当设置多组服务器时, 则会根据分布式策略使用某个服务器
* @example
* $_config['db']['1']['dbhost'] = 'localhost'; // 服务器地址
* $_config['db']['1']['dbuser'] = 'root'; // 用户
* $_config['db']['1']['dbpw'] = 'root';// 密码
* $_config['db']['1']['dbcharset'] = 'gbk';// 字符集
* $_config['db']['1']['pconnect'] = '0';// 是否持续连接
* $_config['db']['1']['dbname'] = 'x1';// 数据库
* $_config['db']['1']['tablepre'] = 'pre_';// 表名前缀
*
* $_config['db']['2']['dbhost'] = 'localhost';
* ...
*
*/
$_config['db'][1]['dbhost']                  = 'localhost';
$_config['db'][1]['dbuser']                  = 'root';
$_config['db'][1]['dbpw']                  = 'root';
$_config['db'][1]['dbcharset']                 = 'gbk';
$_config['db'][1]['pconnect']                 = 0;
$_config['db'][1]['dbname']                  = 'ultrax';
$_config['db'][1]['tablepre']                 = 'pre_';
/**
* 数据库从服务器设置( slave, 只读 ), 支持多组服务器设置, 当设置多组服务器时, 系统根据每次随机使用
* @example
* $_config['db']['1']['slave']['1']['dbhost'] = 'localhost';
* $_config['db']['1']['slave']['1']['dbuser'] = 'root';
* $_config['db']['1']['slave']['1']['dbpw'] = 'root';
* $_config['db']['1']['slave']['1']['dbcharset'] = 'gbk';
* $_config['db']['1']['slave']['1']['pconnect'] = '0';
* $_config['db']['1']['slave']['1']['dbname'] = 'x1';
* $_config['db']['1']['slave']['1']['tablepre'] = 'pre_';
* $_config['db']['1']['slave']['1']['weight'] = '0'; //权重:数据越大权重越高
*
* $_config['db']['1']['slave']['2']['dbhost'] = 'localhost';
* ...
*
*/
$_config['db']['1']['slave'] = array();

//启用从服务器的开关
$_config['db']['slave'] = false;
/**
* 数据库 分布部署策略设置
*
* @example 将 common_member 部署到第二服务器, common_session 部署在第三服务器, 则设置为
* $_config['db']['map']['common_member'] = 2;
* $_config['db']['map']['common_session'] = 3;
*
* 对于没有明确声明服务器的表, 则一律默认部署在第一服务器上
*
*/
$_config['db']['map'] = array();

/**
* 数据库 公共设置, 此类设置通常对针对每个部署的服务器
*/
$_config['db']['common'] = array();

/**
*  禁用从数据库的数据表, 表名字之间使用逗号分割
*
* @example common_session, common_member 这两个表仅从主服务器读写, 不使用从服务器
* $_config['db']['common']['slave_except_table'] = 'common_session, common_member';
*
*/
$_config['db']['common']['slave_except_table'] = '';

默认已经提供了分布式数据库的方法和主从数据库读写分离的方法,配置好数据库MySQL主从服务器后根据上面进行相应配置即可。下面我们来看看MySQL主从服务器的配置:

第一步: MySQL主从设置之主服务器A设置
1.  找到主服务器A的MySQL的配置文件my.ini

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

2. 打开my.ini,在[mysqld]下面添加以下参数

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

3. 在主服务器A中添加一个用于主从复制的帐号:
登陆mysql命令行,执行
GRANT REPLICATION SLAVE ON *.* TO ‘帐号’@’从服务器IP’ IDENTIFIED BY ‘密码';

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

4. 重启MySQL ,让配置生效

5. 可以通过show master status\G;查看主从数据库是否配置成功。

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

第二步: MySQL主从设置之主数据库和从数据库数据一致。
1.  关闭论坛访问,停止更新数据

2. 在主服务器中加入只读锁

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

3. 导出数据库
通过命令导出数据库 mysqldump -u root -p 数据库名 > 导出来的位置

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

4. 将主服务器的数据库导入到从服务器的数据库

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

5. 将主数据库服务器解除只读锁

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

6.  开启论坛访问。

第三步:MySQL主从设置之从服务器B设置
1. 找到从服务器mysql配置文件my.cnf (主服务器是windows,从服务器是Linux。所以配置文件的后缀不一致)

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

2. 打开my.cnf,在[mysqld]下面添加以下参数

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

3. 重启从数据库

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

4、登录从库的MySQL命令行,执行:
change master to master_host=’主服务器IP’, master_user=’主服务器账号’, master_password=’主服务器密码’, master_log_file=’file的值’, master_log_pos=position的值;
//设置连接信息,file及position的值是之前记录下来(在主服务器上通过show master status\G;),position的值没有单引号,其他的值要单引号

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

5. 启动从库连接
start slave; //启动从库连接

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

6、查看从库状态:
show slave status\G; //查看连接情况

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

7、编辑从MYSQL服务器的MySQL配置文件my.cnf,在[mysqld]下面添加以下参数:

实现Discuz x论坛 数据库实现读写分离的方法

实现Discuz x论坛 数据库实现读写分离的方法

8. 测试,可以在主服务器上添加数据或者删除数据,从服务器会对应更新过来。



上一篇:DiscuzX论坛部分数据表的状态字段解释
下一篇:discuz模板中如何修改友情链接限制数目?
UC955 发表于 2015-7-9 12:36:54 来自PC
回帖不支持下,期待更多分享。
xiaodu 发表于 2015-7-9 18:02:52 来自PC
如果我的网站能够发展到这种级别,就牛掰了!
好好待你 发表于 2015-7-10 19:40:12 来自PC
很给力,希望分享更多给力的帖子啊。
许多美美容美发论坛 欢迎自助友链 http://www.xuduomei.com.cn
z110110 发表于 2015-7-11 02:44:55 来自PC
强烈支持,站帮网有你更精彩
774837998 发表于 2015-7-14 19:24:41 来自PC
学习了,哈哈
lgxie 发表于 2016-1-18 11:54:13 来自手机
回帖是一种美德
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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