mysql主從複製 (基於日誌點的複製)

主從複製概念:
這裏寫圖片描述

紫羅蘭砢s 

  mysql的複製(replication)是一個異步的複製過程,從master複製到slave的過程,由三個線程完成,其中兩個線程(sql線程和I/O線程)在slave端,另一個I/O線程在Master端。
  主服務器把數據變化記錄到時二進制日誌中,然後從服務器通過在master中的I/O線程讀取主服務器上的日誌並且把讀取到的日誌通過從服務器上的I/O線程寫入到從服務器的中繼日誌中,接着sql線程讀取中繼日誌,並且在從服務器上重放(完全順序執行日誌中所記錄的各種操作),從而實現Mysql複製。

爲會麼要用?

如果mysql主服務器的訪部量較大,可以通過複製數據,在從服務器
進行查詢操作,從而降低主服務器的訪問壓力,同時從服務器作爲主
服務器的備份,可以避免主服務器因爲故障導致數據丟失的問題。

mysql複製至少需要兩個mysql服務,這些mysql服務可以分佈在不同的服務器上,也可以在一臺服務器啓動多個服務。

show binary logs;

如果報錯就代表mysql沒有開啓二進制。
master修改配置

log-bin
server-id=1

登錄master,添加一個複製使用的賬戶repl,並授於replication slave權限。(常用於建立複製時所需要用到的用戶權限,也就是slave server必須被master server授權具有該權限的用戶,才能通過該用戶複製)
@’ip’或者@‘172.0.0.%’【網段】//%代表所有這個ip段的地址

grant REPLICATION slave on *.* to 'repl'@'172.17.0.%' identified by 'root123'; 

在主服務器上,設置鎖定有效,這個操作確保沒有數據庫操作,以便獲得一致性的快照。(這個命令是全局讀鎖定,執行了命令之後所有庫所有表都被鎖定只讀。一般都是用在數據庫聯機備份,這個時候數據庫的寫操作將被阻塞,讀操作順利進行。)
mysql鎖參考

flush tables with read lock;

查詢master上的進制日誌名file和偏移量position,這個操作的目的是爲了在從數據庫啓動以後,從這個點進行數據庫的恢復。

show master status;

接下來是備份數據庫,我不想備了。。。
備份完成後,解除全局讀鎖定

unlock tables

接着修改從數據庫服務器上的my.cnf,添加一個server-id

log-bin[=paht]#設置log目錄,不設就在datadir
server-id=2
relay_log=mysql-relay-bin=PATH#要指定中繼日誌的文件,因爲默認是master的主機名,如果master改變了主機名,就會導至複製失敗

要使配置生效要重啓。。。
接下來登錄到從服務器上,執行以下命令,指定複製使用的用戶,master以及開始複製的日誌文件和位置。
密碼和用戶名別搞錯了

stop salve;
change master to
master_host='192.168.1.12',
master_user='repl',
master_password='123',
master_log_file='mysql-bin.000029',
master_log_pos=109;

然後

start slave;
show slave status\G;

我第一次會報錯要多試幾次
然後再從服務器上執行

show processlist \G;

發現出現了一個repl用戶的信息。主從同步成功後,我們在主上進行的任何操作,都會同步到從上。
查看從庫

 show slave hosts;

如果你的從服務器同時也作爲其他服務器的主服務器,搭建一個鏈式的複製,那麼就需要開啓這個選項(log-slave-updates),這樣他的從服務器才能獲取他的二進制日誌進行同步操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章