mysql的主從複製及半同步複製機制剖析

mysql主從複製攻略
       我們以兩臺兩臺服務器爲例,一個設置爲主服務器master,另一個設置爲從服務器slave,兩臺服務器的mysql服務可以正常啓動。
       在master中,啓用二進制日誌,server-id=1,一般都已經默認了。在slave中,就可以把server-id=7只要不是1就ok了,如果一樣,就會產生混亂,這是確定主從關係的,不過爲了以後可能增加多臺slave,留點空間,可以是11,22等,呵呵!
       如果你想讓其作爲中間代理,則可以啓動二進制日誌,否則還是關了吧!但是有一項是必須要啓動的,那就是relay-log。在配置文件中添加這兩項:
relay-log=relay-bin
relay-log.index=relay-bin.index
 然後, 就可以在master中給定一個從服務器來訪問的權限了,命令如下:
mysql> grant replication slave ,replication client on *.* to repl@'172.16.%.% identified by 'password';
     給予一個網段的主機,用戶名是repl,在172.26網段上,可以複製數據,但是必須以某個用戶並有密碼才能複製。
flush privileges
show grant for repl@‘172.16.%.%';
可以查看信息
然後重啓從服務器:service mysqld restart,可以查看
在從服務器中,進入mysql
然後在mysql中添加以下內容:
mysql> CHANGE MASTER TO MASTER_HOST='172.16.20.1', MASTER_USER='REPL', MASTER_PASSWRD='123'(此爲例子)
mysql> start slave; 啓動從服務器
show slave status\G 查看從服務器的功能屬性
如果此兩行:Slave_IO_Running: Yes
                        Slave_SOL_Running: Yes
      則表示主從服務正常啓動,可以在主服務器中更新數據,在從服務器中查看驗證了。


mysql的半同步策略
        mysql的半同步是google貢獻出的一個插件,其作用是,在主從之間,網絡傳輸可靠,可以讓主服務器的數據同步到從服務器上,即爲同步傳輸,如果在一定的時間內,沒有響應,則又變成異步傳輸。那麼怎樣設置半同步呢?
       首先,我們要在主從服務器上安裝相應的插件,這個模塊在高級版本中已經附帶好了,在mysql安裝路徑下的lib/plugin/下,安裝步驟如下:
在主服務器上:
   mysql> install plugin rpl_semi_sync_master SONAME'semisync_slave.so';
   mysql> show plugins;
啓用並設置變量值:
   mysql> set global rpl_semi_sync_master_enabled=1;
   mysql> set global rpl_semi_sync_master_timeout=1000;
在從服務器上:
   mysql> install plugin rpl_semi_sync_slave SONAME'semisync_slave.so';
   mysql> show plugins; 可以查看模塊是否裝載完成。
   mysql> set global rpl_semi_sync_slave_enabled=1;
重啓從服務器進程:
   mysql> stop slave;
   mysql> start slave;
然後使用命令:
   show status like 'rpl_%';
 查看服務器狀態是否正常開啓半同步服務。
      之後就可以測試了,對了,在mysql下的設置是不會永久有效的,若要永久有效,就要寫到配置文件中,你懂的,嘿嘿!
另外附屬:
       在mysql啓動的時候,從服務器是會自動啓動的,很多時候我們並不想讓其自動啓動,那該怎麼辦呢?爲什麼會自動啓動呢?
       在mysql/data/路徑下,有master.info ,relaylog.info這兩個文件的存在,在master.info 文件中是CHANGE MASTER TO 傳遞的一些參數,在relaylog.info文件中,指定的是當前使用的中繼日誌及位置,還有主服務器的二進制日誌及其位置,這倆個文件尤其重要,所以一般不要去修改它。
     之所以會自動啓動是因爲這兩個文件存在,要讓其不自動啓動,就要在mysql的配置文件中的[mysqld]段中添加這麼一行:skip-slave-start=1就ok了!


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章