1. 程式人生 > >【MySQL】mysql實現主從複製(Linux)

【MySQL】mysql實現主從複製(Linux)

前言

原理

        原理這個東西上次沒有寫,一併補上。


        Master上有一個IO執行緒,Slave上有兩個執行緒,分別是IO和SQL。下面是主從複製五步原理。

1、Slave伺服器執行start slave;

2、Slave伺服器會通過在Master上授權的複製使用者許可權請求連線Master伺服器,並請求從指定Binlog日誌檔案的指定位置之後傳送Binlog日誌內容;

3、Master伺服器接收到來自Slave伺服器的IO執行緒的請求後,Master伺服器上負責複製的IO執行緒根據Slave伺服器IO執行緒請求的資訊讀取指定Binlog日誌檔案指定位置之後的Binlog日誌資訊,然後返回給Slave端的IO執行緒。返回的資訊中除了Binlog日誌內容外,還有本次返回日誌內容後再Master伺服器端的新的Binlog檔名稱以及在Binlog中的下一個指定更新的位置;

4、當Slave伺服器的IO執行緒獲取到來自Master伺服器上的IO執行緒傳送日誌內容及日誌檔案及位置點後,將Binlog日誌內容依次寫入到Slave端自身的Relay Log(中繼日誌)中檔案(MySQL-relay-bin.xxxxxx)的最末端,並將新的Binlog檔名和位置記錄到master-info檔案中,以便下一次讀取Master端新Binlog日誌時能夠告訴Master伺服器需要從新Binlog日誌的哪個檔案哪個位置開始請求新的Binlog日誌內容;

5、Slave伺服器端的SQL執行緒會實時的檢測本地的Relay Log中新增加的日誌內容,然後及時的把Log檔案中的內容解析成在Master端曾經執行過的SQL語句,並在自身Slave伺服器上安語句的順序執行應用這些SQL語句,應用完畢後清理應用過的日誌。

MySQL主從複製

1、設定server-id,logbin

#vi /etc/my.cnf(server-id主從不同即可)


        主機需要設定server-id和log-bin,如果只是主從複製的話,從機只需要設定server-id,如果需要互為主從,就需要兩個都配置。

2、Master建立賬戶並授權Slave

mysql>grant replication slave on *.* to 'rep'@'192.168.%.%' identified by 'root';//授權一個使用者名稱為rep,密碼為root的賬戶,*.*代表所有庫的所有表(可以指定庫.表),ip代表只能該ip段下有許可權訪問。


3、查詢Master狀態

mysql>show master status;//記錄此時的file和position,停止更新主庫,必要時可上鎖:flush table with read lock;


4、配置Slave

mysql>change master to

         >master_host='Master地址',

         >master_port=mysql埠號,//不加引號

         >master_user='rep',

         >master_password='root',

         >master_log_file='第三步記錄的file',

         >master_log_pos=第三步記錄的position;//不加引號

5、啟動Slave主從複製功能

mysql>start slave;

6、檢查Slave狀態

mysql>show slave status\G;


7、重啟mysql,重新整理許可權

#service mysql restart//重啟

mysql>flush privileges;//重新整理許可權

總結

        現在基本就可以就沒有什麼問題了,如果需要進行互為主從的配置,只需要把上邊的操作,主從換一下,再來一遍就可以了,沒有什麼難度。