關於MySQL的讀寫分離有幾種方法:中間件,Mysql驅動層,代碼控制
關於中間件和Mysql驅動層實現Mysql讀寫分離的方法,今天暫不做研究,
這里主要寫一點簡單的代碼來實現由PHP代碼控制MySQL的讀寫分離。
准備工作:兩個Mysql服務器,已經配置好主從,如果沒配置過Mysql主從,請參考我上一篇博文:《mysql實現主從復制》
主服務器192.168.1.101;
從服務器:192.168.1.105;
思路就是封裝一個類,用於對數據庫的操作,
這里只是寫出一個簡單的demo,用於理解php控制讀寫分離的思想,僅作拋磚引玉只用。
class Db { function __construct($sql) { $querystr = trim($sql); $querystr = substr($sql,0,6); //如果是查詢語句就連接從服務器 if($querystr == 'select') { $conn = mysql_connect('192.168.1.105:3306','root','111111'); mysql_select_db('test'); mysql_query('set names utf8'); $data = array(); $res = mysql_query($sql); while ($row = mysql_fetch_assoc($res)) { $data[] = $row; } print_r($data); echo '<br/>'; echo mysql_get_host_info($conn).'||'.mysql_get_server_info($conn).'||'.mysql_get_proto_info($conn); } //如果不是查詢語句就連接主服務器 else { $conn = mysql_connect('192.168.1.101:3306','root','111111'); mysql_select_db('test'); mysql_query('set names utf8'); mysql_query($sql); echo mysql_affected_rows(); echo '<br/>'; echo mysql_get_host_info($conn).'||'.mysql_get_server_info($conn).'||'.mysql_get_proto_info($conn); } } } $sql1 = "select * from a"; $sql2 = "insert into a (name) values ('Alice')"; $sql3 = "delete from a where id=5"; $sql4 = "update a set name='Jerry' where id=4"; //$model1 = new Db($sql1); //$model2 = new Db($sql2); //$model3 = new Db($sql3); $model4 = new Db($sql4);
