什麼是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看不到異步