簡介:mysql
Mysql的 主從同步 是一個異步的複製過程,從一個 Master複製到另外一個 Slave上。在 Master 與 Slave 之間的實現整個複製過程主要由三個線程來完成,其中兩個線程(Sql線程和IO線程)在 Slave 端,另一個線程(IO線程)在 Master 端。
要實現 MySQL 的 主從同步 ,首先必須打開 Master 端的BinaryLog(mysql-bin)功能,不然沒法實現。由於整個複製過程實際上就是Slave從Master端獲取該日誌而後再在本身身上徹底順序的執行日誌中所記錄的各類操做。打開 MySQL 的 Binary Log 能夠經過在啓動 MySQL Server 的過程當中使用 「—log-bin」 參數選項,或者在 my.cnf 配置文件中的 mysqld 參數組([mysqld]標識後的參數部分)增長 「log-bin」 參數項。
原理:sql
(1)master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events);
(2) slave將master的binary log events拷貝到它的中繼日誌(relay log);
(3) slave重作中繼日誌中的事件,將改變反映它本身的數據。
下圖描述了複製的過程:shell
具體配置過程:數據庫
用vi /etc/my.cnf打開文件,對文件進行修改,在[mysqld]下面進行添加修改:數組
server-id = 1 # 這是數據庫ID,此ID是惟一的,主庫默認爲1,其餘從庫以此ID進行遞增,ID值不能重複,不然會同步出錯; log-bin = mysql-bin # 二進制日誌文件,此項爲必填項,不然不能同步數據; binlog_format=row # bilog設置爲row模式 防止複製出錯
用vi /etc/my.cnf打開文件,對文件進行修改,在[mysqld]下面進行添加修改:異步
server_id = 2 log-bin=mysql-bin relay_log=mysql-relay-bin # 不指定如下參數則全庫同步 #replicate-do-table=test.test_tb 同步某張表 #binlog-do-db = testcreate 須要同步的數據庫,若是須要同步多個數據庫;則繼續添加此項。 #binlog-ignore-db = mysql 不須要同步的數據庫;
create user 'replica'@'%' identified by '123456'; grant replication slave,replication client,reload,super on *.* to 'replica'@'%' identified by '123456';
同步開啓前須要保持主從要同步的數據庫數據一致。ide
# 從庫啓動slave: # (MASTER_LOG_FILE與MASTER_LOG_POS在主庫運行SHOW MASTER STATUS;取得) CHANGE MASTER TO MASTER_HOST='192.168.1.60', MASTER_USER='replica', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=875; start slave; show slave status \G; --查看slave狀態 確保Slave_IO_Running: Yes Slave_SQL_Running: Yes