MySQL Replication主從複製

什麼是MySQL Replication?
一、Replication能夠實現將數據從一臺數據庫服務器(master)複製到一臺到多臺數據庫
服務器上(slave)
二、默認狀況下,屬於異步複製,因此無需維持長鏈接
MySQL Replication的原理:
簡單來講,master將數據庫的改變寫入二進制日誌,slave同步這些二進制日誌,並根據這
些二進制日誌進行數據重演操做,實現數據異步同步。

MySQL Replication的用途:
一、Fail Over 故障切換
二、Backup 在線熱備份(機械故障)
三、High Performance 高性能
mysql


MySQL Replication的架構:
linux

  • master ---> slave (雙機熱備)
    默認狀況下,master接受讀寫請求,slave只接受讀請求以減輕master的壓力
    複製的過程:
    一、slave端的IO線程連上master端,請求
    二、master端返回給slave端,bin log文件名和位置信息
    三、IO線程把master端的bin log內容依次寫到slave端relay bin log裏,並把master端的bin-log文件名和位置記錄到master.info裏。
    四、salve端的sql線程,檢測到relay bin log中內容更新,就會解析relay log裏更新的內容,並執行這些操做。
    sql


  • master ---> slave1 -----> slave2 (級聯架構)
    優勢: 進一步分擔讀壓力
    缺點: slave1 出現故障,後面的全部級聯slave服務器都會同步失敗

    數據庫

  •                        /----> slave1
    master
    (並聯架構)
                           \----> slave2
    優勢:解決上面的slave1的單點故障,同時也分擔讀壓力
    缺點:間接增長master的壓力(傳輸二進制日誌壓力)
    服務器

  • master1 <------> master2 (互爲主從)
    優勢:
    從命名來看,兩臺master好像都能接受讀、寫請求,但實際上,每每運做的過程當中,
    同一時刻只有其中一臺master會接受寫請求,另一臺接受讀請求
    架構


M—S架構:實現雙機熱備(AB複製)
一、能夠下降master讀壓力
二、能夠對數據庫作「熱備」,熱備只能解決硬件master硬件故障,軟件故障等重大
故障問題,但沒法解決人爲誤操做致使的邏輯故障(例如輸入錯誤的SQL語句把重要的記錄刪除了),因此常規的備份是必須。

環境準備及要求:
一、關閉防火牆和selinux
二、hosts文件中兩臺服務器主機名和ip地址一一對應起來
三、系統時間須要同步
四、master和slave的數據庫版本保持一致
五、master:10.1.1.1 slave:10.1.1.2

具體步驟:
一、修改配置文件(master和slave)
master:
log-bin=/var/lib/mysql/mysqld-bin      master必須開啓二進制日誌
server-id=1                                           mysql數據庫的編號,master和slave必須不同

slave:
log-bin=/mysql56/mysqld-bin             slave上的二進制日誌能夠開啓也能夠不開啓,看具體狀況
server-id=2                                           mysql數據庫的編號
relay-log=/mysql56/relay-log              主從複製日誌須要開啓

二、初始化數據,使兩邊數據一致。(以master爲主)

三、master端建立受權用戶
mysql> grant replication slave on *.* to 'slave'@'10.1.1.%' identified by '123';
mysql> flush privileges;

四、查看master的正在寫的二進制文件名和位置
mysql> flush tables with read lock;         先加鎖,防止兩邊數據不一致;若是業務還未上線,這個就沒有必要了
Query OK, 0 rows affected (0.00 sec)
mysql> show master status; 只有打開二進制日誌,這句命令纔有結果,表示當前數據庫的二進制日誌寫到什麼位置
+------------------+----------+--------------+------------------+
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |  331 |              |                       |
+------------------+----------+--------------+------------------+
二進制文件名          正在寫入的位置

五、slave端設定複製信息
mysql> change master to
-> master_host='10.1.1.20',             master ip
-> master_user='slave',                     同步用戶
-> master_password='123',               密碼
-> master_port=3306,                        端口
-> master_log_file='mysqld-bin.000001', 主上面查到到二進制日誌名
-> master_log_pos=331;                      主上面查到的位置號

六、啓動複製線程,開始同步
mysql> start slave;
mysql> show slave status \G;
Slave_IO_Running: Yes 表明成功鏈接到master而且下載日誌
Slave_SQL_Running: Yes 表明成功執行日誌中的SQL語句

回到master端解鎖:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

七、測試驗證
master寫——>slave能夠看到
slave寫——>master看不到
異步

相關文章
相關標籤/搜索