1. 程式人生 > >thinkphp框架實現mysql讀寫分離

thinkphp框架實現mysql讀寫分離

基於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讀寫分離已經執行挺久了