Thinkphp 框架本身是支持读写分离的,如何做呢?
最简单的做法是在配置文件中修改:
PHP代码
- \'DB_TYPE\'=> \'mysql\',
- \'DB_DEPLOY_TYPE\' => 1, //开打支持多服务器
- \'DB_RW_SEPARATE\'=>true, //读写<strong>分离</strong>分开
- \'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,切记,否则乱掉了。