Mysql主從複製(讀寫分離)原理及實現

1.主從複製原理

在這裏插入圖片描述
(1)主數據庫(master)在每個事務更新數據完成之前,主數據庫(master)在二進制日誌記錄這些改變。
(2)從數據庫(slave)開啓一個I/O線程,讀取主數據庫(master)的二進制日誌文件,然後寫入到從數據庫(slave)的中繼日誌。I/O線程會在master打開一個連接,從數據庫I/O線程從主數據庫(master)的二進制日誌中讀取事件,如果已經連接上,它會睡眠並等待主數據庫(master)產生新的事件,I/o線程將這些事件寫入到中繼日誌。I/O一般緩存在OS上,系統開銷比較小。
(3)從數據庫SQL線程讀取中繼日誌中的事件,並重放其中的事件,更新從數據庫的數據,保證主從複製的數據一致性

2.實現主從複製

(1)修改主(master)服務器配置
    修改my.cnf配置文件,在/etc/目錄下。如果不在,可以通過whereis命令搜索下。MYSQL安裝教程

在my.cnf配置文件下添加如下配置,對應原理的第一條,開啓二進制日誌
#配置主從複製選項,mysql的id
server_id = 1
#開啓二進制文件
log-bin=mysql-bin

(2)在主數據庫上創建複製賬號(連接上主數據執行)

GRANT REPLICATION SLAVE ON *.* TO root@'192.168.223.130' IDENTIFIED BY '123456';

在這裏插入圖片描述
序號1:創建的用戶
序號2 :從數據庫的ip,(也可以是任何ip,建議設置成從數據庫ip)
序號3:連接用的密碼
(3)修改從(Slave)數據庫配置

#配置主從複製
server_id = 2
log-bin=mysql-bin
#表示要同步的數據庫
binlog_do_db=seckill

說明:
binlog-ignore-db=test 表示不同步 test 數據庫
binlog_do_db=db_test#表示要同步的數據庫
(4)重啓Mysql
主數據庫和從數據庫重啓

service mysqld restart

(5)查看主服務器狀態

show master status

查看並記錄相關信息,配置從數據庫需要
在這裏插入圖片描述
(6)配置從服務器(連接 Master 服務器),對應原理的第二條,從數據庫開啓I/O線程

change master to master_host='192.168.223.129',master_user='root',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=888;

在這裏插入圖片描述
master_host是主服務器的ip
master_port=3306(這裏沒有配置,默認3306)
master_user:Master 服務器授權用戶,也就是 Master 前面創建的那個用戶
master_password:Master 服務器授權用戶對應的密碼
master_log_file:Master binlog 文件名
master_log_pos:Master binlog 文件中的 Postion 值
關於position值,這裏做一個說明:如果主服務器已經是有很多數據了的,那就先需要備份主服務器的數據到從服務器中,然後再使用命令show master status記錄需要開始同步的位置。

(7)開始複製
在從服務器中執行

start slave

停止的命令是:stop slave;
(8)查看從服務器狀態

show slave status

從數據庫的I/O線程,和SQL線程都是YES說明,主從複製成功。I/O開啓後可以從主數據庫讀取二進制日誌,然後寫入中繼日誌,SQL讀取中繼日誌,重放中繼日誌的事件,實現主從同步。
在這裏插入圖片描述

發佈了102 篇原創文章 · 獲贊 65 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章