1、異步復(fù)制:這是MySQL默認(rèn)的復(fù)制模式。在這種模式下,主庫在執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返回給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理。這種模式的優(yōu)點(diǎn)是實(shí)現(xià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)和適用場景。以下是對各種復(fù)制模式的詳細(xì)介紹:
1、異步復(fù)制:這是MySQL默認(rèn)的復(fù)制模式。在這種模式下,主庫在執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返回給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理。這種模式的優(yōu)點(diǎn)是實(shí)現(xià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ù)后,會等待至少一個(gè)從庫接收到并寫入relay log中才返回給客戶端。這種模式提高了數(shù)據(jù)的安全性,但會造成一定的延遲。
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)是可能會增加事務(wù)的延遲。
5、組復(fù)制:這種模式是一種高級的復(fù)制技術(shù),支持多主多從架構(gòu),適用于讀寫參半的場景。它通過組內(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)配置文件
啟動容器,把配置文件copy到本地,(node1和node2同步操作)
# 在/opt/下創(chuàng)建一個(gè)mysql目錄
# 臨時(shí)啟動一下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、配置啟動主庫
在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上啟動主庫
執(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)建主備賬號
在主庫中創(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),通過使用命令行客戶端連接到源來啟動源上的會話,并通過執(zhí)行以下語句刷新所有表并阻止寫入語句。
6、配置啟動從庫
在node2上編輯從庫配置文件,并啟動從庫。
7、測試
連接主庫和從庫,創(chuàng)建數(shù)據(jù)庫表并插入數(shù)據(jù),查看從庫是否同步。
至此,主從同步已經(jīng)完成。如果需要一主多從,只需要在多部署幾個(gè)從庫,按照上面從庫的部署方式就可以了。
如果感覺寫的還能看,可以關(guān)注公眾號,會將最新消息推送給你。
小編推薦閱讀
count(*)、count(1)哪個(gè)更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計(jì)到部署交付各階段說明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀OpenAI官方開源多智能體框架Swarm,社區(qū)反響熱烈
閱讀Vue-Vben-Admin:功能強(qiáng)大的Vue3后臺管理系統(tǒng)模板
閱讀深度解析Spring AI:請求與響應(yīng)機(jī)制的核心邏輯
閱讀.NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始
閱讀llama.cpp:一個(gè)適用于中小型研發(fā)企業(yè)的高性能CPU/GPU大語言模型推理框架
閱讀Windows應(yīng)急響應(yīng)-Auto病毒
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2024 haote.com 好特網(wǎng)