一、基本原理
MySQL複製過程分成三步:
- 1)、master將改變記錄到二進位日誌(binary log)。這些記錄過程叫做二進位日誌事件,binary log events;
- 2)、slave將master的binary log events拷貝到它的中繼日誌(relay log);
- 3)、slave重做中繼日誌中的事件,將改變應用到自己的資料庫中。 MySQL複製是異步的且串行化的。
簡單來說: slave會從master讀取binlog來進行數據同步
Mysql的複製(replication)是一個異步的複製。
實現整個複製操作主要由三個進程完成的,其中兩個進程在Slave(Sql進程和IO進程),另外一個進程在 Master(IO進程)上。
要實施複製,首先必須打開Master端的binary log(bin-log)功能,否則無法實現。
因為整個複製過程實際上就是Slave從Master端獲取該日誌然後再在自己身上完全順序的執行日誌中所記錄的各種操作。
複製的詳細過程:
(1)Slave上面的IO進程連接上Master,並請求從指定日誌文件的指定位置(或者從最開始的日誌)之後的日誌內容;
(2)Master接收到來自Slave的IO進程的請求後,通過負責複製的IO進程根據請求信息讀取制定日誌指定位置之後的日誌信息,返回給Slave 的IO進程。返回信息中除了日誌所包含的信息之外,還包括本次返回的信息已經到Master端的bin-log文件的名稱以及bin-log的位置;
(3)Slave的IO進程接收到信息後,將接收到的日誌內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候能夠清楚的高速Master「我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我」;
(4)Slave的Sql進程檢測到relay-log中新增加了內容後,會馬上解析relay-log的內容成為在Master端真實執行時候的那些可執行的內容,並在自身執行。
原則:
- 每個slave只有一個master;
- 每個slave只能有一個唯一的伺服器ID;
- 每個master可以有多個salve;
二、一主一從相關配置
演示主機為Windows (配置文件為my.ini文件),從機為Linux(配置文件為my.cnf)
1、主機配置(windows的my.ini)
- 1)、[必須]主伺服器唯一ID;
- 2)、[必須]啟用二進位日誌;log-bin=自己本地的路徑/data/mysqlbin。log-bin=D:/devSoft/MySQLServer5.5/data/mysqlbin。
- 3)、[可選]啟用錯誤日誌log-err=自己本地的路徑/data/mysqlerr。log-err=D:/devSoft/MySQLServer5.5/data/mysqlerr。
- 4)、[可選]根目錄basedir="自己本地路徑"。basedir="D:/devSoft/MySQLServer5.5/"。
- 5)、[可選]臨時目錄tmpdir="自己本地路徑"。tmpdir="D:/devSoft/MySQLServer5.5/"。
- 6)、[可選]數據目錄datadir="自己本地路徑/Data/"。datadir="D:/devSoft/MySQLServer5.5/Data/"。
- 7)、[可選]設置不要複製的資料庫binlog-ignore-db=mysql。
- 8)、[可選]設置需要複製的資料庫binlog-do-db=需要複製的主資料庫名字。
2、從機配置(linux的my.cnf)
- [必須]從伺服器唯一ID;
- [可選]啟用二進位日誌;
3、因修改過配置文件,請主機+從機都重啟後台mysql服務
4、主從機都關閉linux防火牆
- windows手動關閉;
- 關閉虛擬機linux防火牆 service iptables stop;
5、在Windows主機上建立帳戶並授權slave
- GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'從機器資料庫IP' IDENTIFIED BY '123456';。
- 刷新一下配置flush privileges;。
- 查詢master的狀態。show master status;記錄下File和Position的值;
- 執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值變化。
6、在Linux從機上配置需要複製的主機
- 配置
CHANGE MASTER TO MASTER_HOST='主機IP',MASTER_USER='zhangsan',MASTER_PASSWORD='123456',MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position數字;
- 啟動從伺服器複製功能,start slave;。
- 查看配置下面兩個參數都是Yes,則說明主從配置成功!Slave_IO_Running: Yes。Slave_SQL_Running: Yes。
CHANGE MASTER TO MASTER_HOST='192.168.124.3',
MASTER_USER='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.具體數字',MASTER_LOG_POS=具體值;
7、主機鍵表,看從機有沒有
8、如何停止主從服務複製功能
在linux下面輸入stop slave;。