mysql主從服務器配置

假如一個業務場景,測試後,讀寫比列爲1:20,根據讀寫比例,合理設置優化方案。
node

讀寫比列:mysql

寫數據/讀數據比例,    insert/update/delete    /  selectlinux


從「讀寫分離」概念推導實現基本要素:sql

通常來講,讀服務器就是指寫服務器的數據鏡像。數據庫


從服務器端看:要有N臺從服務器和主服務器保持數據一致。服務器

從客戶端看:好比有一條insert語句和一條select語句,ide

則要區分讀/寫語句,而且分別請求從/主服務器。測試


服務器端讀寫分離的具體技術優化

1:數據庫集羣技術日誌

集羣由3個概念

(1)sql節點    sql node

(2)數據節點    data node

(3)管理節點    ndb managerment


sql語句發送「1sql節點」,「1sql」節點發往「2數據節點」,再由3管理節點完成數據節點之間的同步。


集羣技術相對複雜,至少有3種節點,4臺服務器才能完成。


2,數據庫複製

寫/master(0)      同步        讀/slave(1)


3,數據庫複製replication的實現原理

(1)主服務器凡運行語句,都產生一個二進制日誌 binlog

(2)從服務器不斷讀取主服務器的binlog

(3)從服務器讀取到的binlog,轉換爲自身可執行的relaylog

(4)執行relaylog


4,實現步驟:

(1)首先確保主服務器打開二進制日誌功能

這樣,主服務器一旦有數據變化,當即產生二進制日誌

(2)從服務器也須要開啓二進制日誌和relay日誌功能

這樣能夠從主服務器讀取binlog,併產生relaylog

(3)在主服務器創建一個從服務器的帳號,並授予最高權限

(4)指定從服務器對應的主服務器,開啓從服務器


具體實施

假如一臺虛擬機xp,和一臺linux

(1)在虛擬機xp下安裝mysql做爲從服務器

(2)在linux下編譯mysql,做爲主服務器

(3)保證xp與linux的3306端口互通

(4)配置主服務器,打開binlog

    mysql>show master status;

    Empty set (0.00 sec)


    #開啓二進制日誌

    log-bin=mysql-bin

    #給服務器起一個惟一的id

    serve-id=1

    #指定日誌格式

    binlog-format=mixd/row/statement


重啓mysql

    mysql>show master status;

會多兩個文件:mysql-bin.000001和mysql-bin.index

已經可以充當master服務器


5,配置從服務器打開binlog和relaylog

    mysql>show slave status;

    Empty set (0.00 sec)


    [mysql]

    #slave config

    log_bin    =mysql-bin

    server_id    =2

    relay_log    =mysql-relay-bin

    log_slave_updates    =1

    read_only    =1

重啓從服務器


6,在主服務器上建立相應的複製帳號

    mysql>grant replication slave,replication client

        ->on *.*

        ->to repl@'192.168.2.%' identified by '111111';

    Query OK, 0 rows affected (0.02 sec)


    mysql>flush privileges;

    Query OK,0 rows affected (0.00 sec)


7,在從服務器經過語句指定要複製的主服務器(注意,能夠一主多從,不能夠一從多主)

    mysql>change master to

        ->master_host='192.168.2.99',(主服務器ip)

        ->master_user='repl',

        ->master_password='111111',

        ->master_log_file='mysql-bin.000001',

        ->master_log_pos=0;

    Query OK, 0 rows affected (0.08 sec)


8,啓動從服務器功能

    ->start slave;


9,測試

如何在客戶端應用的時候,路由語句

通常用兩種方法

(1)直接在PHP的mysql類作判斷,最簡單,不用額外加軟件

好比discuz論壇。

代碼:

//下面這個mysql類,不單單是一個mysql類,還充當一個sql語句的路由功能。

class mysql{

    $dbm=主服務器;

    $dbs1=從服務器1;

    $dbs2=從服務器2;


    public function query(){

        在query裏面進行語句判斷

        分別鏈接不一樣的mysql服務器

    }

}


new mysql


mysql->query();


(2)用集羣中間件

好比官方的mysql_proxy,還有國產的中間件amoeba

相關文章
相關標籤/搜索