最近涉及到的项目中用到了thinkphp,我都n年没有碰过这玩意了。但现在还是需要用一用。正好那些能够下载得到的wxcms也可以用这个来优化一下性能。。其实我就一台服务器。装逼而已
于是转一下别人的文章,因为他其中特别写了一句:只要是exec就一定从主库走,query一定从从库走。所以建议query中不要有实际的更新和插入操作。以防万一
原文地址:http://www.verydemo.com/demo_c327_i782.html
前言:
thinkphp 框架本身是支持读写分离的,如何做呢?
最简单的做法是在配置文件中修改:
'db_type'=>?'mysql',? 'db_deploy_type'?=>?1,//开打支持多服务器 'db_rw_separate'=>true,?//读写分离分开 'db_host'=>?'192.168.100.78,192.168.100.60',?//?数据库服务器地址?master(写)/slave(读) 'db_name'=>'test',? 'db_user'=>'root',? 'db_pwd'=>'root',? 'db_prefix'?=>?'fav_',?
默认第一台数据库78是主数据库,负责写入操作,第二台60负责读操作,thinkphp 会自动识别读和写,然后分配链接对应的数据库,来达到读写分离的效果。
注意事项:
1. 如果要设置分布式数据库,暂时不支持db_dsn方式配置。
2.如果你当前采用了分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,而不管你的sql语句是什么。
3.如果你当前采用了分布式数据库,并且设置了读写分离的话,execute方法始终是在写服务器执行,因此execute方法对应的都是写操作,而不管你的sql语句是什么。
因此,'db_dsn'=> 'mysql:host=192.168.100.60;dbname=51fanli_cang', 这种方式不支持主从分离,需要改。
当采用原生态的sql语句进行写入操作的时候,要用execute,读操作要用query,切记,否则乱掉了。
搞定!
---eof---
原文地址:thinkphp的主从数据库配置, 感谢原作者分享。
