1、異步復(fù)制:這是MySQL默認(rèn)的復(fù)制模式。在這種模式下,主庫在執(zhí)行完客戶端提交的事務(wù)后會(huì)立即將結(jié)果返回給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理。這種模式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,但缺點(diǎn)是如果主庫崩潰,已經(jīng)提交的事務(wù)可能沒有傳到從庫,導(dǎo)致數(shù)據(jù)不一致。 2、全同步復(fù)制:在這種模式下,主庫執(zhí)行完一個(gè)事務(wù)后,需要
MySQL提供了多種復(fù)制模式,包括異步復(fù)制、全同步復(fù)制、半同步復(fù)制、增強(qiáng)半同步復(fù)制和組復(fù)制。每種模式都有其特點(diǎn)和適用場(chǎng)景。以下是對(duì)各種復(fù)制模式的詳細(xì)介紹:
1、異步復(fù)制:這是MySQL默認(rèn)的復(fù)制模式。在這種模式下,主庫在執(zhí)行完客戶端提交的事務(wù)后會(huì)立即將結(jié)果返回給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理。這種模式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,但缺點(diǎn)是如果主庫崩潰,已經(jīng)提交的事務(wù)可能沒有傳到從庫,導(dǎo)致數(shù)據(jù)不一致。
2、全同步復(fù)制:在這種模式下,主庫執(zhí)行完一個(gè)事務(wù)后,需要等待所有從庫都執(zhí)行了該事務(wù)才能返回給客戶端。這種模式的優(yōu)點(diǎn)是數(shù)據(jù)一致性高,但缺點(diǎn)是性能影響較大,因?yàn)樾枰却袕膸斓拇_認(rèn)。
3、半同步復(fù)制:這種模式介于異步復(fù)制和全同步復(fù)制之間。主庫在執(zhí)行完客戶端提交的事務(wù)后,會(huì)等待至少一個(gè)從庫接收到并寫入relay log中才返回給客戶端。這種模式提高了數(shù)據(jù)的安全性,但會(huì)造成一定的延遲。
4、增強(qiáng)半同步復(fù)制:這種模式在半同步復(fù)制的基礎(chǔ)上進(jìn)一步增強(qiáng)了數(shù)據(jù)安全性。主庫將每個(gè)事務(wù)寫入binlog后,等待從庫刷新到磁盤才返回給客戶端。這種模式的優(yōu)點(diǎn)是進(jìn)一步減少了數(shù)據(jù)丟失的風(fēng)險(xiǎn),但缺點(diǎn)是可能會(huì)增加事務(wù)的延遲。
5、組復(fù)制:這種模式是一種高級(jí)的復(fù)制技術(shù),支持多主多從架構(gòu),適用于讀寫參半的場(chǎng)景。它通過組內(nèi)節(jié)點(diǎn)間的相互通信和投票機(jī)制來保證數(shù)據(jù)的一致性和高可用性。
在實(shí)際應(yīng)用中,根據(jù)業(yè)務(wù)需求和性能要求選擇合適的復(fù)制模式非常重要。
接下來,我們將詳細(xì)介紹如何配置MySQL主從復(fù)制,以實(shí)現(xiàn)數(shù)據(jù)同步。
1、獲取MySQL鏡像
在node1和node2上分別拉取mysql鏡像,該鏡像mysql版本是8.4.3,執(zhí)行以下命令:
docker pull mysql:8
2、獲取默認(rèn)配置文件
啟動(dòng)容器,把配置文件copy到本地,(node1和node2同步操作)
# 在/opt/下創(chuàng)建一個(gè)mysql目錄
# 臨時(shí)啟動(dòng)一下mysql
docker run -d \
--name mysql-master \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8
# 把數(shù)據(jù)和配置目錄copy到本地
node1上執(zhí)行
docker cp mysql-master:/etc/my.cnf /opt/mysql/my.cnf
node2上執(zhí)行
docker cp mysql-master:/etc/my.cnf /opt/mysql/my.cnf
3、配置啟動(dòng)主庫
在node1修改主庫配置文件,編輯以下配置:
[mysqld]
#mysql 服務(wù)ID,保證整個(gè)集群環(huán)境中唯一,取值范圍:1 – 2的32次方-1,默認(rèn)為1
server-id=1
#是否只讀,1 代表當(dāng)前服務(wù)器只讀(不能做增刪改操作), 0代表讀寫
read-only=0
# 設(shè)置日志格式,默認(rèn)值ROW。row(記錄行數(shù)據(jù)) statement(記錄sql) mixed(混合模式)
binlog_format=STATEMENT
# 二進(jìn)制日志名,默認(rèn)binlog
log-bin=master_binlog
# 設(shè)置需要復(fù)制的數(shù)據(jù)庫,默認(rèn)復(fù)制全部數(shù)據(jù)庫
#binlog-do-db=test
# 設(shè)置不需要復(fù)制的數(shù)據(jù)庫
# binlog-ignore-db=test
4、在node1上啟動(dòng)主庫
執(zhí)行以下命令:
docker run -d \
--name mysql-master \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /opt/mysql/mysql_data:/var/lib/mysql \
-v /opt/mysql/my.cnf:/etc/my.cnf \
--restart=always \
--privileged=true \
mysql:8
5、創(chuàng)建主備賬號(hào)
在主庫中創(chuàng)建專門用于復(fù)制的賬戶,并授予復(fù)制所需的權(quán)限。
# 創(chuàng)建專門用于復(fù)制的賬戶
CREATE USER 'backups'@'%' IDENTIFIED BY 'backups';
# 授予此帳戶復(fù)制所需的權(quán)限
GRANT REPLICATION SLAVE ON *.* TO 'backups'@'%';
獲取復(fù)制源二進(jìn)制日志坐標(biāo),要配置副本在正確的點(diǎn)開始復(fù)制過程,需要在二進(jìn)制日志中記下源的當(dāng)前坐標(biāo)。要獲取源二進(jìn)制日志坐標(biāo),通過使用命令行客戶端連接到源來啟動(dòng)源上的會(huì)話,并通過執(zhí)行以下語句刷新所有表并阻止寫入語句。
6、配置啟動(dòng)從庫
在node2上編輯從庫配置文件,并啟動(dòng)從庫。
7、測(cè)試
連接主庫和從庫,創(chuàng)建數(shù)據(jù)庫表并插入數(shù)據(jù),查看從庫是否同步。
至此,主從同步已經(jīng)完成。如果需要一主多從,只需要在多部署幾個(gè)從庫,按照上面從庫的部署方式就可以了。
如果感覺寫的還能看,可以關(guān)注公眾號(hào),會(huì)將最新消息推送給你。
小編推薦閱讀
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)