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複製是異步的且串行化的測試
master 192.168.1.5大數據
slave 192.168.1.6spa
OS:Oracle Linux 6.1
MySQL:5.5.37
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集羣來解決。