MySQL 複製介紹及搭建

MySQL複製介紹

MySQL複製就是一臺MySQL服務器(slave)從另外一臺MySQL服務器(master)進行日誌的複製而後再解析日誌並應用到自身,相似Oracle中的Data Guard。mysql

MySQL複製有那些好處:sql

  • 第一是解決宕機帶來的數據不一致,由於MySQL複製能夠實時備份數據;數據庫

  • 第二點是減輕數據庫服務器的壓力,多臺服務器的性能通常比單臺要好。可是MySQL複製不適合大數據量,大數據量推薦使用集羣。服務器

MySQL複製過程分紅三步:網絡

  • master將改變記錄到二進制日誌(binary log)。這些記錄過程叫作二進制日誌事件,binary log events;異步

  • slave將master的binary log events拷貝到它的中繼日誌(relay log);性能

  • slave重作中繼日誌中的事件,將改變應用到本身的數據庫中。 MySQL複製是異步的且串行化的測試

MySQL複製搭建

環境準備

master 192.168.1.5大數據

slave 192.168.1.6spa

OS:Oracle Linux 6.1

MySQL:5.5.37

Master配置

1)分配複製權限

主庫和從庫均須要執行

2)清空日誌文件

主從庫都是默認開啓二進制日誌文件

須要注意的是,若是不想清空日誌文件的話,須要記錄當前master的log_file和log_pos,並在下面啓用複製操做時指定這兩個參數或者在slave的配置文件指定。

Slave設置

1) 修改從服務器server-id

修改完之後須要重啓數據庫

2)清空日誌文件,同Master

3)啓用複製

讓slave鏈接master並開始重作master二進制日誌中的事件

master_log_pos的值爲0,由於它是日誌的開始位置;master_log_file是初始日誌文件。若是master日誌沒有被清空,這裏就是當前master的日誌信息

須要注意的是,默認狀況下,會同步該用戶下全部的DB,若是想限定哪些DB,有3種思路

  • 在master上的/etc/my.inf中經過參數binlog-do-db、binlog-ignore-db設置須要同步的數據庫

  • 在執行grant分配權限操做的時候,限定數據庫

  • 在slave上限定數據庫使用replicate-do-db=dbname

4)開啓slave

5)確認Slave是否和Mater成功通訊。若是 Slave_IO_Running和Slave_SQL_Running都是yes,則證實配置成功

測試

Master建立數據庫

Slave查看數據庫已同步

Master建立表插入數據

Slave查看

經過以上驗證,能夠看到主服務器上的修改可以正常同步到從服務器。

補充說明

1)作了MySQL主從複製之後,使用mysqldump對數據備份時,必定要注意按照以下方式:

這樣就能夠保留file和position的信息,在新搭建一個slave的時候,還原完數據庫,file和position的信息也隨之更新,接着再start slave 就能夠很迅速的完成增量同步。

其餘複製方式

主主複製

master-slave只能進行單向操做,像網絡中的半雙工。master-master能夠實現服務器之間互相同步,且主主複製能夠避免出現單點故障後整個系統宕機。主主複製最大的問題就是數據插入或更新衝突。配置方法同主從複製,反過來讓slave同步master。注意master_log_file和master_log_pos參數要與master上對應。具體能夠參考這裏

單一master和多slave

由一個master和多個slave組成的複製系統比較簡單。slave之間並不互相通訊,只能與master通訊。若是寫操做較少,讀操做不少,能夠採用。能夠將讀操做分佈到其餘slave,從而減輕master的壓力。但slave增長到必定數量時,slave對master的負載以及網絡帶寬都會成爲問題。

主從多級複製

讀操做不少能夠採用單一maste和多slave,但增大到必定slave後連到master的slaveIO線程太多會形成master壓力增大,從而形成數據複製延時。多級複製就是爲了解決這個問題。若是想實現主-從(主)-從多級複製,須要設置log-slave-updates參數。同時二進制日誌也必須啓用。

固然,增長複製的級聯層次,同一個變動傳到最底層的Slave所須要通過的MySQL也會更多,一樣可能形成延時較長的風險。若是條件容許,傾向於經過拆分紅多個Replication集羣來解決。

相關文章
相關標籤/搜索