正文
具体实现
其实从代码去做读写分离这个事,主要是要懂它原来的实现逻辑,这个就不多说了,可以参考
zabbix前端代码浅析之登录验证全过程
。
关键点
主要是DBselect这个函数,zabbix里面封装了这个函数去作所有的查询操作,为我们无形中省了很多的功夫,当然也是有这个调研的前提,不然从代码上作读写分类是痴心妄想。
这部分的修改
知道了要改的地方,那改起来就很简单了。
if(!strpos($query,'sessions')){
$dbc = mysql_connect($DB_S["SERVER"],$DB_S["USER"],$DB_S["PASSWORD"]) or die(mysql_error());
mysql_select_db($DB_S["DATABASE"],$dbc) or die(mysql_error());
mysql_query('SET NAMES utf8',$dbc);
$result = mysql_query($query,$dbc);
} else {
$result = mysql_query($query,$DB['DB']);
}
if(!$result){
error('Error in query ['.$query.'] ['.mysql_error().']');
}
短短几行代码就可以实现功能了。
* 作了什么?
我这里只是做了一个判断,如果sql中存在sessions的字样就走原来的主库读,否则其他的
sql均走从库。 sessions这个库是用来记录session的,由于读写延迟的问题,直接读从库
可能是有问题的,当然我实际测试的时候是可以通过的。
存在的坑