thinkphp框架實現mysql讀寫分離
阿新 • • 發佈:2019-01-06
基於thinkphp3.2.3,官方手冊:http://www.kancloud.cn/manual/thinkphp/1733
注意事項:
1、首先得配置好mysql主從,可以多主多從
2、在讀寫分離的情況下,預設第一個資料庫配置是主伺服器的配置資訊,負責寫入資料,如果設定了DB_MASTER_NUM引數,則可以支援多個主伺服器寫入。其它的都是從資料庫的配置資訊,負責讀取資料,數量不限制。每次連線從伺服器並且進行讀取操作的時候,系統會隨機進行在從伺服器中選擇
3、呼叫模型的CURD操作的話,系統會自動判斷當前執行的方法的讀操作還是寫操作,如果你用的是原生SQL,那麼需要注意系統的預設規則: 寫操作必須用模型的execute方法,讀操作必須用模型的query方法,否則會發生主從讀寫錯亂的情況
config.php
<?php return array( //'配置項'=>'配置值' 'DB_DEPLOY_TYPE'=> 1, // 設定分散式資料庫支援 'DB_TYPE' => 'mysql', //分散式資料庫型別必須相同 'DB_HOST' => '192.168.20.195,192.168.20.201', 'DB_NAME' => 'hadoop', //如果相同可以不用定義多個 'DB_USER' => 'open,open', 'DB_PWD' => '123456,123456', 'DB_PORT' => '3306', 'DB_PREFIX' => '', );
IndexController.class.php
<?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { //查詢 從庫 public function index(){ $obj=M("user"); $data=$obj->select(); print_r($data);exit; } //寫入 主庫 public function add() { $obj=M("user"); $data["name"]="777"; if ($obj->add($data)) { //$this->success("資料新增成功") ; }else { //$this->error("資料新增失敗"); } } }
測試:
先呼叫index.php?s=/Home/Index/add 插入資料然後訪問index.php列印查詢結果,如果要驗證是否插入是否走的master庫,把配置檔案slave資料庫密碼故意改錯看下效果,同理查詢也是
線上的tp讀寫分離已經執行挺久了