2核1G3M服务器88一季度

腾讯云,阿里云百度云等 折扣价→点我←

Discuz x3.3 x3.2论坛实现数据库实现读写分离的方法 discuz 教程

公共账号 管理员组

最近一直都在处理一些大数据库的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

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

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

4. 重启MySQL ,让配置生效

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

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

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

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

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

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

6. 开启论坛访问。

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

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

3. 重启从数据库

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的值没有单引号,其他的值要单引号

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

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

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

8. 测试,可以在主服务器上添加数据或者删除数据,从服务器会对应更新过来。
站长窝论坛版权声明 1、本帖标题:Discuz x3.3 x3.2论坛实现数据库实现读写分离的方法
2、论坛网址:站长窝论坛
3、站长窝论坛的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
4、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
5、站长窝论坛一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本帖由公共账号在站长窝论坛《程序综合区》版块原创发布, 转载请注明出处!
评论
最新回复 (1)
返回
发新帖