如圖,主從同步的流程大致是從服務(wù)器有一個(gè)IO線程讀取主服務(wù)的binlog日志,然后寫(xiě)入自己的relaylog,會(huì)有一個(gè)sql線程解析成sql去執(zhí)行,先寫(xiě)到relaylog再去解析是利用了生產(chǎn)者消費(fèi)者模型,達(dá)到一個(gè)異步的作用。

國(guó)際慣例,授之以魚(yú)不如授之以漁,開(kāi)始之前先告訴大家官方文檔怎么去查
地址:https://dev.mysql.com/doc/refman/8.0/en/grant.html#grant-privileges

首先我們準(zhǔn)備兩個(gè)裝有mysql8的虛擬機(jī),可以安裝好一個(gè)然后克隆。
我的是192.168.1.8和192.168.1.9
1.8做主服務(wù)器,1.9做從

我們先來(lái)做主服務(wù)器的工作
配置文件配置如下:

可以對(duì)這三個(gè)參數(shù)做一個(gè)解釋?zhuān)垂俜轿臋n:
大致意思就是必須在源和副本上設(shè)置這個(gè)唯一的server-id,范圍是 2的32次方 ? 1.

log_bin 是binlog日志文件名
log_bin_index就是索引文件
配置好以后重啟mysql服務(wù)
接下來(lái)我們創(chuàng)建一個(gè)用戶專(zhuān)門(mén)用來(lái)做讀取主服務(wù)器二進(jìn)制文件
mysql -u root -p create user replication_user IDENTIFIED BY 'Replication@163.com'; grant REPLICATION SLAVE on *.* to 'replication_user'@'%'; alter user 'replication_user'@'%' IDENTIFIED WITH mysql_native_password BY 'Replication@163.com'; flush privileges;

查看一下主服務(wù)器狀態(tài)和二進(jìn)制文件

接下來(lái)是從服務(wù)器
打開(kāi)從服務(wù)器relay日志

重啟MySQL
systemctl restart mysqld
然后通過(guò)命令設(shè)置主服務(wù)的信息:
分別就是主服務(wù)的地址,二進(jìn)制文件名,用戶和密碼,都是上面設(shè)置好的
change master to master_host='192.168.1.8', master_port=3306, master_user='replication_user', master_password='Replication@163.com', master_log_file='master_bin.000002', master_log_pos=0; start slave;

查看狀態(tài),我這里分別有兩個(gè)錯(cuò)誤
show slave status \G;
第一次是密碼加密方式的問(wèn)題,按上面創(chuàng)建用戶的方式做,不會(huì)有這個(gè)問(wèn)題

第二次是server—uuid和主服務(wù)器重復(fù),因?yàn)槲业膹氖强寺∵^(guò)來(lái)的,所以重復(fù)了,

需要修改數(shù)據(jù)目錄下的auto.cnf,你的數(shù)據(jù)目錄看配置文件在哪里,我的是

在這個(gè)目錄下找到auto.cnf

然后我們?cè)诓榭磸牡臓顟B(tài):
先stop slave;
再start slave;
看到Waiting for master to send event說(shuō)明沒(méi)問(wèn)題了,再等待主服務(wù)的事件

接下來(lái)就是測(cè)試?yán)?/h2>
我們?cè)谥鞣?wù)上創(chuàng)建一個(gè)庫(kù),創(chuàng)建一個(gè)表,看是否能夠同步過(guò)來(lái)
好的,沒(méi)有問(wèn)題,大功告成
