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,切記,否則亂掉了。