天天看點

mysql主從伺服器配置

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

讀寫比列:

寫資料/讀資料比例,    insert/update/delete    /  select

從“讀寫分離”概念推導實作基本要素:

一般來說,讀伺服器就是指寫伺服器的資料鏡像。

從伺服器端看:要有N台從伺服器和主伺服器保持資料一緻。

從用戶端看:比如有一條insert語句和一條select語句,

則要區分讀/寫語句,并且分别請求從/主伺服器。

伺服器端讀寫分離的具體技術

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-bin.000001和mysql-bin.index

已經能夠充當master伺服器

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

    mysql>show slave status;

    [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();