簡單的mysql讀寫分離

2021-06-28 16:20:31 字數 2718 閱讀 6738

網上搜mysql讀寫分離,全部都是一樣的**,這裡主要是記錄下,而且網上的讀寫分離中正則匹配select語句有點錯誤,這裡改正了一下

首先讀寫分離主類**如下:

<?php

class mysql_rw_php

function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = true)

} else

}//唯讀連線失敗

if(!$this->link && !$halt) return false;

//未初始化rw時,第乙個連線作為rw

if($this->link_rw == null)

$this->link_rw = $this->link;

if($this->version() > '4.1')

if($this->version() > '5.0.1')

}if($dbname)

}//連線乙個唯讀的mysql資料庫

function connect_ro($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0)

}else

}//設定一系列唯讀資料庫並且連線其中乙個

function set_ro_list($ro_list)

}function select_db($dbname)

return @mysql_select_db($dbname, $this->link_rw);

}function fetch_array($query, $result_type = mysql_assoc)

function fetch_one_array($sql, $type = '')

function query($sql, $type = '')

$func = $type == 'unbuffered' && @function_exists('mysql_unbuffered_query') ?

'mysql_unbuffered_query' : 'mysql_query';

if(!($query = $func($sql, $this->link)) && $type != 'silent')

$this->querynum++;

return $query;

}function affected_rows()

function error()

function errno()

function result($query, $row)

function num_rows($query)

function num_fields($query)

function free_result($query)

function insert_id()

function fetch_row($query)

function fetch_fields($query)

function version()

function close()

function halt($message = '', $sql = '')

}?>

接著測試頁面**

<?php

require_once('test.php');

//rw info

$db_rw = array(

'dbhost'=>'192.168.2.111',

'dbuser'=>'root',

'dbpw'=>'123456',

'dbname'=>'test2'

);$db_ro = array(

array(

'dbhost'=>'192.168.2.110',

'dbuser'=>'root',

'dbpw'=>''));

$db = new mysql_rw_php;

//connect master

$db->connect($db_rw['dbhost'], $db_rw['dbuser'], $db_rw['dbpw'], $db_rw['dbname']);

//method 1: connect one server

$db->connect_ro($db_ro[0]['dbhost'], $db_ro[0]['dbuser'], $db_ro[0]['dbpw']);

//method 2: connect one server from a list by rand

$db->set_ro_list($db_ro);

//send to rw

//$sqlinsert = "insert into test values ('6', '666')";

//$db->query($sqlinsert);

//sleep(1);

//send to ro

$sql = "select * from test";

$qr = $db->query($sql);

while($row = $db->fetch_array($qr))

?>

經測試還可以,當然這只是乙個最基本的讀寫分離的**,如果部署到我們的專案中這樣肯定是不行的,這裡只是做個筆記,一面忘記了,部署到我們的專案要把資料庫類,封裝成成熟的滿足我們需求的物件類,可按照這個原理擴充套件成我們自己想要的類

mysql讀寫分離

5.讀寫分離適用與讀遠大於寫的場景,如果只有一台伺服器,當select很多時,update和delete會被這些select訪問中的資料堵塞,等待select結束,併發效能不高。對於寫和讀比例相近的應用,應該部署雙主相互複製。6.可以在從庫啟動是增加一些引數來提高其讀的效能,例如 skip inno...

讀寫分離 MySQL

1 what 讀寫分離 讀寫分離,基本的原理是讓主資料庫處理事務性增 改 刪操作 insert update delete 而從資料庫處理select查詢操作。資料庫複製被用來把事務性操作導致的變更同步到集群中的從資料庫。2 why 那麼為什麼要讀寫分離呢?因為資料庫的 寫 寫10000條資料到or...

mysql讀寫分離

在資料庫集群架構中,讓主庫負責處理事務性查詢,而從庫只負責處理select查詢,讓兩者分工明確達到提高資料庫整體讀寫效能。當然,主資料庫另外乙個功能就是負責將事務性查詢導致的資料變更同步到從庫中,也就是寫操作。即主從複製和讀寫分離是離不開的 1 分攤伺服器壓力,提高機器的系統處理效率 讀寫分離適用於...