要點:
ab複製
mysql
mysql集羣架構流程:sql
ABB(主從複製)-->MHA(實現mysql高可用、讀寫分離、腳本控制vip飄逸)-->haproxy(對slave集羣實現分發,負載均衡)-->keepalive(預防一臺haproxy單點故障,對兩臺及以上的haproxy實現高可用)vim
一、MySQL複製特性 --MySQL AB複製,即主從複製 master slave
備份(容災)
減輕master壓力 AB 讀寫分離
拓展: AA master-master 主主複製
ABBB 一主多從架構
1.1 AB複製過程(原理)
是一種異步複製,5.5版本以後能夠實現半同步複製。
master將全部的增刪改(DML)的操做寫入到binlog中;
slave上的IO線程登錄到master上拉取binlog並寫入到relay log(中繼日誌)中;
slave上的SQL線程讀取中繼日誌並將SQL語句在本地執行,這樣數據同步。負載均衡
slave上的兩個線程:
io線程:讀取master上的binglog日誌,並寫入到本機上的relay log中
SQL線程:讀取relay log,並將其(SQL語句)應用到本地異步
1.2 搭建AB複製
1.2.1 分析都須要作什麼
a.master和slave肯定身份(server_id:越小越優先)
b.master開啓binglog日誌
c.master設置複製帳戶和賦權
d.slave肯定從binglog的什麼位置開始應用sql語句ide
ip規劃:
251 master
241 slave測試
1.2.2 步驟
master:
1) 開啓binglog
vim /etc/my.cnf
server-id=1 //肯定身份,id小的優先做爲master
log-bin=binlog
log-bin_index=binlog.indexspa
2) 建立專用複製用戶,容許從slave上連過來的複製用戶
grant replication slave on *.* to 'repl'@'192.168.19.241' identified by '123';
flush privileges;
show grants for jeck@13.1.1.2;線程
3)查看master當前的binglog日誌及位置信息
show master status\G
mysql> show master status\G
*************************** 1. row ***************************
File: binlog.000003
Position: 258
slave:
1)肯定身份,可選的設置中繼日誌名和中繼日誌索引
server-id=3
relay-log=/var/lib/mysql/relay_log #也能夠不寫,mysql默認開啓中繼日誌
relay-log_index=/var/lib/mysql/relay_log.index
2)設置slave找誰拉取binglog,從哪一個位置開始拉...(在拉以前須要關閉slave,拉完以後再開啓)
change master to...
mysql> change master to master_host='192.168.19.251', master_port=3306, master_user='repl', master_password='123', master_log_file='binlog.000003', master_log_pos=4;
3) 開啓slave
start slave;
4)查看slave狀態
show slave status\G
Slave_IO_State: Waiting for master to send event binlog event :二進制事件,即master上產生的增刪改的操做
Master_Host: 192.168.19.251
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003 //master上的當前的binglog日誌
Read_Master_Log_Pos: 518 //讀取到的binglog的位置
Relay_Log_File: relay_log.000002 //本地中繼日誌文件
Relay_Log_Pos: 508 //本地中級日誌位置
Relay_Master_Log_File: binlog.000003*** //當前中繼日誌中記錄的是master上的哪個binlog日誌文件
Slave_IO_Running: Yes //IO 線程狀態
Slave_SQL_Running: Yes //SQL線程狀態
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 518*** //執行到的binglog的位置,去對比show master status\G 看到的位置,能夠得出有沒有延遲
5) 測試
在master上建立庫和表並插入數據,而後到slave上看下有沒有同步過來
問題:
A已經運行了一段時間,纔想着搭建AB複製:
一、A上全庫備份,並恢復到B上
二、B再去 change master to
實驗過程:
在master上
a.全庫備份
mysqldump --all-databases -x > /opt/all.sql
b.編輯配置文件與以前相同
c.設置複製專用用戶及權限
同上...
看一下master狀態:
同上...
在slave上
先得到master上的全庫備份,並恢復在本地
mysql < /opt/all.sql
後面就同樣的