標籤:mysql主從複製 雙機熱備
主從複製一、主從複製的工作原理Mysql在Master與slave之間實現整個複製的過程由3個線程來完成的,其中兩個線程(SQL線程和IO線程)在Slave端,另外一個線程(IO)在Master端 要實現Mysql的複製必須首先開啟Master端的binary log(也就是二進位日誌)否則無法實現. Mysql複製基本過程如下: (1)Slave上面的IO 線程連結上Master,並且請求指定記錄檔的位置(或者 從開始的日誌之後的日誌內容) (2)Master接收到來自Slave的IO線程請求後,通過負責複製的IO線程根據這個請求資訊指定日誌的位置後,把這個資訊返回給Slave的IO線程(返回的信心當中除了日誌所包含的資訊外,還包括了Master端的二進位檔案名稱和 二進檔案的位置) (3)Slave的IO線程接收到Master端的返回資訊之後,將日誌內容一次寫入slave端的Relay log檔案,(mysql-relay-bin.xxx)當中,並且讀取到Master端的bin-log檔案和位置記錄, 記錄到master-info檔案當中,以便下一次能夠清楚的告訴Master我需要從某個bin-log的哪個位置開始往後的內容,請發給我。 (4)、Slave的SQL線程檢測Relay log中心增加了內容後,馬上解析Master二進位檔案中的內容,並且執行裡面的Query語句. 二、主從的環境Master IP:10.0.0.201Slave IP:10.0.0.202(1)在Master上操作 操作檔案為:/etc/my.cnf首先將log-bin日誌開啟其次將server-id設定為1將log-slave-updates給關閉掉service mysqld restart 建立一個內部複製通訊使用者grant replication slave on *.* to ‘admin‘@‘10.0.0.202‘ identified by ‘123456‘;flush privileges;(2)在Slave上操作 操作檔案為:/etc/my.cnf首先將bin-log日誌開啟其次將server-id設定為2將log-slave-updates開啟#POS號以及記錄檔名稱在master端 >show master status\G; 查看service mysqld restart>stop slave;>change master to master_host=‘10.0.0.201‘, master_user=‘admin‘, master_password=‘123456‘, master_log_file=‘mysql-bin.000005‘, master_log_pos=578;>start slave;>show slave status\G; 當master跟slave掛掉之後,slave丟失了一部分資料:如果要恢複這段丟失的資料,slave端已經停止了slave,change當中的POS號和bin-log就填slave端當前的內容。才能恢複如果填寫master的POS號和bin-log內容則不恢複。(原因:主要根據POS號查看跟MASTER端的日誌是否在最新位置)。