天天看點

mysql的一主多從和雙主淺析

一、主從

   一主多從時,主伺服器上必須啟用多個binlogdump線程,來對多個從伺服器發起binlog event dump,同時主伺服器來得面臨,前端衆多用戶端發起的寫操作。

   主伺服器壓力很大,若挂了,從還能讀不能寫了,業務不能工作了,這樣就催生了雙主模型。雙主模型下連上多個從也可以。

   但雙主模型會導緻資料部不一緻。

   在一從多主模型下,本身主的壓力很大(client+dump),可以減少dump線程個數來減輕

   主的壓力,在這種情況下,可以使用多級複制。可能導緻三級資料同步慢。将二級存儲引擎改為blackhole,本地不儲存資料,僅僅生成二進制日志,這樣的伺服器叫中繼伺服器。

   中繼伺服器僅僅用來減輕主的壓力。

   一主多從時,可以專門使用一台從伺服器進行冷備。

   複制能取代備份嗎?

       不可以,例如drop database類誤操作,任何一個伺服器都無法挽回,隻能

       通過備份重導資料。 (和raid無法取代備份時一樣的)

   多級複制:主-->從(主)-->從-->...

   中間伺服器:同時啟用中繼日志(i/o thread)、二級制日志(SQL thread)

二、雙主配置簡述

   MySQL内置實作雙主,有很大風險,會導緻資料不一緻;

   若不一緻,需手動修護;

    1)、在兩台伺服器上各自建立一個具有複制權限的使用者;

    2)、修改配置檔案(先備份):

  主伺服器A上

[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
auto-increment-offset = 1
auto-increment-increment = 2
skip_slave_start
    mysql從伺服器隻要有設定,若重新開機,會自動将程序設定為從伺服器,啟動從   線程,設定skip_slave_start跳過。      

# 主伺服器B上

[mysqld]
server-id = 20
log-bin = mysql-bin
relay-log = relay-mysql
auto-increment-increment = 2
# 步長
auto-increment-offset = 2
# 起始值
skip_slave_start      

添加日志檔案目錄:mkdir ....

 chwon -R mysql:mysql ....

3)、如果此時兩台伺服器均為建立立,且無其它寫入操作,各伺服器隻需記錄目前自己二進制日志檔案及事件位置,以之作為另外的伺服器複制起始位置即可

####serverA
mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 710
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)      
####serverB
mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
            File: mysql-bin.000003
        Position: 811
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)      

4)分别在AB上建立有複制權限的賬号:

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';
mysql> FLUSH PRIVILIGES;      

4、各伺服器接下來指定對另一台伺服器為自己的主伺服器即可:

####serverA
mysql> CHANGE MASTER TO MASTER_HOST=..,MSTAER_USER=..,MASTER_PASSWORD=..,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811
####serverB
mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710      

三、雙主模型的實作

繼續閱讀