雙機熱備份盖喷,即能夠把主數(shù)據(jù)庫中所有的數(shù)據(jù)同時寫到備份的數(shù)據(jù)庫中错邦,從而實現(xiàn)MySQL數(shù)據(jù)庫的熱備份土榴。
MySQL Replication是MySQL提供的一種主從備份的機制荸哟,并且整個復(fù)制備份過程是異步進行的,其高效的性能設(shè)計芒帕,也讓復(fù)制的延時非常小歉嗓。
MySQL復(fù)制功能在實際的應(yīng)用場景中被廣泛的應(yīng)用于保證數(shù)據(jù)系統(tǒng)數(shù)據(jù)的安全性和擴展設(shè)計中。
一副签、MySQL Replication設(shè)計原理
MySQL的復(fù)制(replication)是一個異步的復(fù)制遥椿,從一個MySQLinstance(稱為Master)復(fù)制到另一個MySQLinstance(稱為Slave)。
整個復(fù)制操作主要由三個進程完成淆储,其中兩個進程在Slave(Sql進程和IO進程)冠场,另外一個進程在Master(IO進程)上。
要實施復(fù)制本砰,首先必須打開Master端的binarylog(bin-log)功能碴裙,否則無法實現(xiàn)。整個復(fù)制過程就是Slave從Master端獲取該日志后再在自己身上完全順序的執(zhí)行日志中所記錄的各種操作点额。
復(fù)制的基本過程如下:
1舔株、Slave上面的IO進程連接上Master,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容还棱;
2载慈、Master接收到來自Slave的IO進程請求后,通過負(fù)責(zé)復(fù)制的IO進程根據(jù)請求信息讀取指定日志指定位置之后的日志信息珍手,返回給Slave的IO進程办铡。返回信息中除了日志所包含的信息之外,還包括本次返回信息已經(jīng)到Master端的bin-log文件的名稱以及bin-log的位置琳要。
3寡具、Slave的IO進程接收到信息后,將接收到的日志內(nèi)容依次添加到Slave端的relay-log文件的最末端稚补,并將讀取到的Master端的bin-log的文件名和位置記錄到master-info文件中童叠,以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log的某個位置開始往后的日志內(nèi)容,請發(fā)給我”课幕。
4厦坛、Slave的Sql進程監(jiān)測到relay-log中新增加了內(nèi)容后,會馬上解析relay-log的內(nèi)容成為Master端真實執(zhí)行時候的那些可執(zhí)行的內(nèi)容乍惊,并在自身執(zhí)行粪般。
二、 具體操作
假設(shè)同步guoya_teach這個庫
設(shè)置主服務(wù)器Master配置
進入mysql : docker exec -it mysql mysql -uroot -p密嗎
新建一個連接賬戶 授予權(quán)限
grant replication slave on *.* to 'replicate'@'%' identified by '123456';
設(shè)置mysql配置文件
wait_timeout=172800
interactive_timeout=172800
max_connections=800
server-id = 1 # 集群id
log_bin = /var/log/mysql/mysql-bin # 日志地址,記得給讀寫權(quán)限
binlog_do_db = guoya_teach # 要收集日志的庫
binlog_ignore_db = mysql # 不收集日志的庫
設(shè)置成功后重啟 mysql
進入mysql Show master status\G
記住file 和 Position
設(shè)置從服務(wù)器slave配置
設(shè)置數(shù)據(jù)庫配置文件
wait_timeout=172800
interactive_timeout=172800
max_connections=800
server-id = 2 # id不能與master相同
log_bin = /var/log/mysql/mysql-bin
binlog_do_db = guoya_teach # 需要復(fù)制的庫
binlog_ignore_db = mysql # 不需要復(fù)制的庫
重啟mysql
進入mysql : docker exec -it mysql mysql -uroot -p密嗎
為從機設(shè)置主機配置
change master to master_host='103.XX.41.XX',master_user='replicate',master_password='XXXX..',master_log_file='mysql-bin.000001',master_log_pos=154;
設(shè)置完成后 啟動 slave
start slave;
查看從機狀態(tài)
show slave status\G