一蛛砰、概述
主從復(fù)制是指將主數(shù)據(jù)庫的 DDL 和 DML 操作通過二進(jìn)制日志傳到從庫服務(wù)器中,然后在從庫上對(duì)這些日志重新執(zhí)行(也叫重做),從而使得從庫和主庫的數(shù)據(jù)保持同步旅掂。
MySQL支持一臺(tái)主庫同時(shí)向多臺(tái)從庫進(jìn)行復(fù)制, 從庫同時(shí)也可以作為其他從服務(wù)器的主庫什荣,實(shí)現(xiàn)鏈狀復(fù)制矾缓。
MySQL 復(fù)制的優(yōu)點(diǎn)主要包含以下三個(gè)方面:
- 主庫出現(xiàn)問題,可以快速切換到從庫提供服務(wù)稻爬。
- 實(shí)現(xiàn)讀寫分離嗜闻,降低主庫的訪問壓力。
- 可以在從庫中執(zhí)行備份桅锄,以避免備份期間影響主庫服務(wù)琉雳。
二、原理
MySQL主從復(fù)制的核心就是 二進(jìn)制日志友瘤,具體的過程如下:
image.png
復(fù)制分成三步:
- Master 主庫在事務(wù)提交時(shí)翠肘,會(huì)把數(shù)據(jù)變更記錄在二進(jìn)制日志文件 Binlog 中。
- 從庫讀取主庫的二進(jìn)制日志文件 Binlog 商佑,寫入到從庫的中繼日志 Relay Log锯茄。
- slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)茶没。
三肌幽、搭建
準(zhǔn)備好兩臺(tái)服務(wù)器之后,在上述的兩臺(tái)服務(wù)器中分別安裝好MySQL抓半,并完成基礎(chǔ)的初始化準(zhǔn)備(安裝喂急、密碼配置等操作)工作。 其中:
- 192.168.200.200 作為主服務(wù)器master
- 192.168.200.201 作為從服務(wù)器slave
主庫配置
1.修改配置文件 /etc/my.cnf
#mysql 服務(wù)ID笛求,保證整個(gè)集群環(huán)境中唯一廊移,取值范圍:1 – 232-1,默認(rèn)為1
server-id=1
#是否只讀,1 代表只讀, 0 代表讀寫
read-only=0
#忽略的數(shù)據(jù), 指不需要同步的數(shù)據(jù)庫
#binlog-ignore-db=mysql
#指定同步的數(shù)據(jù)庫
#binlog-do-db=db01
2.重啟MySQL服務(wù)器
systemctl restart mysqld
3.登錄mysql探入,創(chuàng)建遠(yuǎn)程連接的賬號(hào)狡孔,并授予主從復(fù)制權(quán)限
#創(chuàng)建replicauser用戶,并設(shè)置密碼蜂嗽,該用戶可在任意主機(jī)連接該MySQL服務(wù)
CREATE USER 'replicauser'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';
#為 'replicauser'@'%' 用戶分配主從復(fù)制權(quán)限
GRANT REPLICATION SLAVE ON *.* TO 'replicauser'@'%';
4.通過指令苗膝,查看二進(jìn)制日志坐標(biāo)
show master status ;
image.png
- file : 從哪個(gè)日志文件開始推送日志文件
- position : 從哪個(gè)位置開始推送日志
- binlog_ignore_db : 指定不需要同步的數(shù)據(jù)庫
從庫配置
1.修改配置文件 /etc/my.cnf
#mysql 服務(wù)ID,保證整個(gè)集群環(huán)境中唯一植旧,取值范圍:1 – 2^32-1辱揭,和主庫不一樣即可
server-id=2
#是否只讀,1 代表只讀, 0 代表讀寫
read-only=1
2.重新啟動(dòng)MySQL服務(wù)
systemctl restart mysqld
3.登錄mysql,設(shè)置主庫配置
8.0.23中的語法:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.200', SOURCE_USER='replicauser',
SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000004',
SOURCE_LOG_POS=663;
8.0.23 之前的版本:
CHANGE MASTER TO MASTER_HOST='192.168.200.200', MASTER_USER='replicauser',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000004',
MASTER_LOG_POS=663;
- SOURCE_HOST/MASTER_HOST: 主庫IP地址
- SOURCE_USER/MASTER_USER: 連接主庫的用戶名
- SOURCE_PASSWORD/MASTER_PASSWORD: 連接主庫的密碼
- SOURCE_LOG_FILE/MASTER_LOG_FILE: binlog日志文件名
- SOURCE_LOG_POS/MASTER_LOG_POS: binlog日志文件位置
4.開啟同步操作
start replica ; #8.0.22之后
start slave ; #8.0.22之前
5.查看主從同步狀態(tài)
show replica status ; #8.0.22之后
show slave status ; #8.0.22之前