1 概述
本文講述了如何使用MyBatisPlus
+ShardingSphereJDBC
進(jìn)行讀寫(xiě)分離,以及利用MySQL
進(jìn)行一主一從的主從復(fù)制。具體步驟包括:-
MySQL
主從復(fù)制環(huán)境準(zhǔn)備(Docker
) -
搭建
ShardingShpereJDBC
+MyBatisPlus
+Druid
環(huán)境 - 測(cè)試
2 環(huán)境
-
OpenJDK 17.0.3
-
Spring Boot 2.7.0
-
MyBatis Plus 3.5.1
-
MyBatis Plus Generator 3.5.2
-
Druid 1.2.10
-
ShardingSphereJDBC 5.1.1
-
MySQL 8.0.29
(Docker
)
3 一些基礎(chǔ)理論
3.1 讀寫(xiě)分離
讀寫(xiě)分離,顧名思義就是讀和寫(xiě)分開(kāi),更具體來(lái)說(shuō),就是:- 寫(xiě)操作在主數(shù)據(jù)庫(kù)進(jìn)行
- 讀操作在從數(shù)據(jù)庫(kù)進(jìn)行
MySQL
上實(shí)現(xiàn),相信會(huì)不如一臺(tái)MySQL
寫(xiě),另外兩臺(tái)MySQL
讀這樣的配置性能高。另一方面,在很多時(shí)候都是讀操作的請(qǐng)求要遠(yuǎn)遠(yuǎn)高于寫(xiě)操作,這樣就顯得讀寫(xiě)分離非常有必要了。3.2 主從復(fù)制
主從復(fù)制,顧名思義就是把主庫(kù)的數(shù)據(jù)復(fù)制到從庫(kù)中,因?yàn)樽x寫(xiě)分離之后,寫(xiě)操作都在主庫(kù)進(jìn)行,但是讀操作是在從庫(kù)進(jìn)行的,也就是說(shuō),主庫(kù)上的數(shù)據(jù)如果不能復(fù)制到從庫(kù)中,那么從庫(kù)就不會(huì)讀到主庫(kù)中的數(shù)據(jù)。嚴(yán)格意義上說(shuō),讀寫(xiě)分離并不要求主從復(fù)制,只需要在主庫(kù)寫(xiě)從庫(kù)讀即可,但是如果沒(méi)有了主從復(fù)制,讀寫(xiě)分離將失去了它的意義。因此讀寫(xiě)分離通常與主從復(fù)制配合使用。因?yàn)楸臼纠褂玫氖?/span>MySQL
,這里就說(shuō)一下MySQL
主從復(fù)制的原理,如下圖所示:
?工作流程如下:-
主庫(kù)修改數(shù)據(jù)后,將修改日志寫(xiě)入
binlog
-
從庫(kù)的
I/O
線程讀取主庫(kù)的binlog
,并拷貝到從庫(kù)本地的binlog
中 -
從庫(kù)本地的
binlog
被SQL
線程讀取,執(zhí)行其中的內(nèi)容并同步到從庫(kù)中
3.3 數(shù)據(jù)庫(kù)中間件簡(jiǎn)介
數(shù)據(jù)庫(kù)中間件可以簡(jiǎn)化對(duì)讀寫(xiě)分離以及分庫(kù)分表的操作,并隱藏底層實(shí)現(xiàn)細(xì)節(jié),可以像操作單庫(kù)單表那樣操作多庫(kù)多表,主流的設(shè)計(jì)方案主要有兩種:- 服務(wù)端代理:需要獨(dú)立部署一個(gè)代理服務(wù),該代理服務(wù)后面管理多個(gè)數(shù)據(jù)庫(kù)實(shí)例,在應(yīng)用中通過(guò)一個(gè)數(shù)據(jù)源與該代理服務(wù)器建立連接,由該代理去操作底層數(shù)據(jù)庫(kù),并返回相應(yīng)結(jié)果。優(yōu)點(diǎn)是支持多語(yǔ)言,對(duì)業(yè)務(wù)透明,缺點(diǎn)是實(shí)現(xiàn)復(fù)雜,實(shí)現(xiàn)難度大,同時(shí)代理需要確保自身高可用
-
客戶(hù)端代理:在連接池或數(shù)據(jù)庫(kù)驅(qū)動(dòng)上進(jìn)行一層封裝,內(nèi)部與不同的數(shù)據(jù)庫(kù)建立連接,并對(duì)
SQL
進(jìn)行必要的操作,比如讀寫(xiě)分離選擇走主庫(kù)還是從庫(kù),分庫(kù)分表select
后如何聚合結(jié)果。優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,天然去中心化,缺點(diǎn)是支持語(yǔ)言較少,版本升級(jí)困難
-
Cobar
:阿里開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù)分布式服務(wù)中間件,已停更 -
DRDS
:脫胎于Cobar
,全稱(chēng)分布式關(guān)系型數(shù)據(jù)庫(kù)服務(wù)
-
MyCat
:開(kāi)源數(shù)據(jù)庫(kù)中間件,目前更新了MyCat2
版本 -
Atlas
:Qihoo 360
公司Web
平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開(kāi)發(fā)維護(hù)的一個(gè)基于MySQL
協(xié)議的數(shù)據(jù)中間層項(xiàng)目,同時(shí)還有一個(gè)NoSQL
的版本,叫Pika
-
tddl
:阿里巴巴自主研發(fā)的分布式數(shù)據(jù)庫(kù)服務(wù) -
Sharding-JDBC
:ShardingShpere
的一個(gè)子產(chǎn)品,一個(gè)輕量級(jí)Java
框架
4 MySQL
主從復(fù)制環(huán)境準(zhǔn)備
看完了一些基礎(chǔ)理論就可以進(jìn)行動(dòng)手了,本小節(jié)先準(zhǔn)備好MySQL
主從復(fù)制的環(huán)境,基于Docker
+MySQL
官方文檔搭建。4.1 主庫(kù)操作
4.1.1 拉取鏡像并創(chuàng)建容器運(yùn)行
dockerpullmysql dockerrun-itd-p3306:3306-eMYSQL_ROOT_PASSWORD=123456--namemastermysql dockerexec-itmaster/bin/bash 在主庫(kù)中進(jìn)行更新鏡像源,安裝
vim
以及net-tools
的操作:cd/etc/apt echodebhttp://mirrors.aliyun.com/debian/bustermainnon-freecontribdeb-srchttp://mirrors.aliyun.com/debian/bustermainnon-freecontribdebhttp://mirrors.aliyun.com/debian-securitybuster/updatesmaindeb-srchttp://mirrors.aliyun.com/debian-securitybuster/updatesmaindebhttp://mirrors.aliyun.com/debian/buster-updatesmainnon-freecontribdeb-srchttp://mirrors.aliyun.com/debian/buster-updatesmainnon-freecontribdebhttp://mirrors.aliyun.com/debian/buster-backportsmainnon-freecontribdeb-srchttp://mirrors.aliyun.com/debian/buster-backportsmainnon-freecontrib>sources.list aptupdate&&aptupgrade aptinstallvimnet-tools
4.1.2 修改配置文件
vim/etc/mysql/my.cnf 添加下面兩行數(shù)據(jù):
[mysqld] server-id=1#全局唯一,取值[1,2^32-1],默認(rèn)為1 binlog-do-db=test#表示需要復(fù)制的是哪個(gè)庫(kù) 修改完成后重啟。
4.1.3 準(zhǔn)備數(shù)據(jù)源
CREATEDATABASEtest; USEtest; CREATETABLEuser( idBIGINTPRIMARYKEY, nameVARCHAR(30)NOTNULL, );
4.1.4 創(chuàng)建一個(gè)復(fù)制操作的用戶(hù)(可選但推薦)
注意創(chuàng)建用戶(hù)需要加上mysql_native_password
,否則會(huì)導(dǎo)致從庫(kù)一直處于連接狀態(tài):CREATEUSER'repl'@'172.17.0.3'IDENTIFIEDWITHmysql_native_passwordBY'123456'; GRANTREPLICATIONslaveON*.*TO'repl'@'172.17.0.3'; 具體的地址請(qǐng)根據(jù)從庫(kù)的地址修改,可以先看后面的從庫(kù)配置部分。
4.1.5 數(shù)據(jù)備份(可選)
如果原來(lái)的主庫(kù)中是有數(shù)據(jù)的,那么這部分?jǐn)?shù)據(jù)需要手動(dòng)同步到從庫(kù)中:FLUSHTABLESWITHREADLOCK; 開(kāi)啟主庫(kù)的另一個(gè)終端,使用
mysqldump
導(dǎo)出:mysqldump-uroot-p--all-databases--master-data>dbdump.db 導(dǎo)出完成后,解除讀鎖:
UNLOCKTABLES;
4.1.6 查看主庫(kù)狀態(tài)
SHOWMASTERSTATUS;
需要把
File
以及Position
記錄下來(lái),后面從庫(kù)的配置需要用到。4.2 從庫(kù)操作
4.2.1 拉取鏡像并創(chuàng)建容器運(yùn)行
dockerpullmysql dockerrun-itd-p3307:3306-eMYSQL_ROOT_PASSWORD=123456--nameslavemysql dockerexec-itslave/bin/bash 進(jìn)入容器后,像主庫(kù)一樣更新源然后安裝
vim
和net-tools
:cd/etc/apt echodebhttp://mirrors.aliyun.com/debian/bustermainnon-freecontribdeb-srchttp://mirrors.aliyun.com/debian/bustermainnon-freecontribdebhttp://mirrors.aliyun.com/debian-securitybuster/updatesmaindeb-srchttp://mirrors.aliyun.com/debian-securitybuster/updatesmaindebhttp://mirrors.aliyun.com/debian/buster-updatesmainnon-freecontribdeb-srchttp://mirrors.aliyun.com/debian/buster-updatesmainnon-freecontribdebhttp://mirrors.aliyun.com/debian/buster-backportsmainnon-freecontribdeb-srchttp://mirrors.aliyun.com/debian/buster-backportsmainnon-freecontrib>sources.list aptupdate&&aptupgrade aptinstallvimnet-tools
4.2.2 修改配置文件
vim/etc/mysql/my.cnf 添加如下兩行:
[mysqld] server-id=2#全局唯一,不能與主庫(kù)相同 replicate-do-db=test#與主庫(kù)相同,表示對(duì)該庫(kù)進(jìn)行復(fù)制 修改完成后重啟。
4.2.3 查看ip
地址
查看從庫(kù)的ip
地址,用于給主庫(kù)設(shè)置同步的用戶(hù):ifconfig 輸出:
inet172.17.0.3netmask255.255.0.0broadcast172.17.255.255 那么主庫(kù)中用于復(fù)制的用戶(hù)就可以是
repl@172.17.0.3
。4.2.4 導(dǎo)入數(shù)據(jù)(可選)
如果主庫(kù)有數(shù)據(jù)可以先導(dǎo)入到從庫(kù):mysqldump-uroot-p--all-databases
4.2.5 準(zhǔn)備數(shù)據(jù)源
CREATEDATABASEtest; USEtest; CREATETABLEuser( idBIGINTPRIMARYKEY, nameVARCHAR(30)NOTNULL, );
4.2.6 設(shè)置主庫(kù)
可以使用change master to
/change replication source to
(8.0.23+
)命令:CHANGEREPLICATIONSOURCETO source_host='172.17.0.2',#可以使用ifconfig查看主庫(kù)ip source_user='repl',#之前主庫(kù)創(chuàng)建的用戶(hù) source_password='123456',#密碼 source_log_file='binlog.000003',#之前在主庫(kù)上使用showmasterstatus查看的日志文件 source_log_pos=594;#同樣使用showmasterstatus查看
4.2.7 開(kāi)啟從庫(kù)
STARTSLAVE; SHOWSLAVESTATUSG 新版本(
8.0.22+
)可使用:STARTREPLICA; SHOWREPLICASTATUSG 需要
IO
和SQL
線程顯示Yes
才算成功:
?4.3 測(cè)試
主庫(kù)選擇插入一條數(shù)據(jù):INSERTINTOuserVALUES(1,"name",3); 然后從庫(kù)就能
select
到了:
?
5 搭建Spring Boot
環(huán)境
5.1 新建項(xiàng)目并引入依賴(lài)
新建Spring Boot
項(xiàng)目,并引入如下依賴(lài):implementation'com.alibaba1.2.10' implementation'com.baomidou3.5.1' implementation'org.freemarker2.3.31' implementation'com.baomidou3.5.2' implementation'org.apache.shardingsphere5.1.1'
Maven
版本:<dependency> <groupId>com.baomidougroupId> <artifactId>mybatis-plus-boot-starterartifactId> <version>3.5.1version> dependency> <dependency> <groupId>com.baomidougroupId> <artifactId>mybatis-plus-generatorartifactId> <version>3.5.2version> dependency> <dependency> <groupId>org.freemarkergroupId> <artifactId>freemarkerartifactId> <version>2.3.31version> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>druidartifactId> <version>1.2.10version> dependency> <dependency> <groupId>org.apache.shardingspheregroupId> <artifactId>sharding-jdbc-spring-boot-starterartifactId> <version>5.1.1version> dependency>
5.2 使用生成器
importcom.baomidou.mybatisplus.generator.FastAutoGenerator; importcom.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; publicclassGenerator{ publicstaticvoidmain(String[]args){ FastAutoGenerator.create("jdbc//localhost:3306/test","root","123456") .globalConfig(builder-> builder.author("author").outputDir(System.getProperty("user.dir")+"/src/main/java").build()) .packageConfig(builder-> builder.parent("com.example.demo").moduleName("user").build()) .strategyConfig(builder-> builder.addInclude("user").entityBuilder().enableLombok().disableSerialVersionUID().build()) .templateEngine(newFreemarkerTemplateEngine()) .execute(); } } 直接運(yùn)行
main
方法即可生成代碼,配置請(qǐng)根據(jù)個(gè)人需要進(jìn)行更改。5.3 配置文件
spring: shardingsphere: mode: type:Memory#內(nèi)存模式,元數(shù)據(jù)保存在當(dāng)前進(jìn)程中 datasource: names:master,slave#數(shù)據(jù)源名稱(chēng),這里有兩個(gè) master:#跟上面的數(shù)據(jù)源對(duì)應(yīng) type:com.alibaba.druid.pool.DruidDataSource#連接池 url:jdbc//127.0.0.1:3306/test#連接url username:root password:123456 slave:#跟上面的數(shù)據(jù)源對(duì)應(yīng) type:com.alibaba.druid.pool.DruidDataSource url:jdbc//127.0.0.1:3306/test username:root password:123456 rules: readwrite-splitting:#讀寫(xiě)分離規(guī)則 data-sources:#數(shù)據(jù)源配置 random:#這個(gè)名字隨便起 type:Static#靜態(tài)類(lèi)型 load-balancer-name:round_robin#負(fù)載均衡算法名字 props: write-data-source-name:master#寫(xiě)數(shù)據(jù)源 read-data-source-names:slave#讀數(shù)據(jù)源 load-balancers:#負(fù)載均衡配置 round_robin:#跟上面負(fù)載均衡算法的名字對(duì)應(yīng) type:ROUND_ROBIN#負(fù)載均衡算法 props: sql-show:true#打印SQL 因?yàn)榕渲梦募膬?nèi)容比較多,以下進(jìn)行分開(kāi)說(shuō)明。
5.3.1 模式
spring.shardingsphere.mode.type
,模式有三種:-
Memory
:內(nèi)存模式,初始化配置或執(zhí)行SQL
等操作均在當(dāng)前進(jìn)程生效 -
Standalone
:?jiǎn)螜C(jī)模式,可以將數(shù)據(jù)源和規(guī)則等元數(shù)據(jù)信息持久化,但是這些元數(shù)據(jù)不會(huì)在集群中同步 -
Cluster
:集群模式,提供了多個(gè)Apache ShardingSphere
實(shí)例之間元數(shù)據(jù)共享以及分布式場(chǎng)景下的狀態(tài)協(xié)調(diào)的能力,也提供水平擴(kuò)展以及高可用的能力
-
spring.shardingsphere.mode.type=Standalone
:設(shè)置單機(jī)模式 -
spring.shardingsphere.mode.repository.type=
:持久化倉(cāng)庫(kù)的類(lèi)型,單機(jī)模式適用類(lèi)型為File
-
spring.shardingsphere.mode.repository.props.path=
:元數(shù)據(jù)存儲(chǔ)路徑,默認(rèn).shardingsphere
-
spring.shardingsphere.mode.overwrite=
:是否覆蓋
-
spring.shardingsphere.mode.type=Cluster
:設(shè)置集群模式 -
spring.shardingsphere.mode.repository.type=
:持久化倉(cāng)庫(kù)類(lèi)型,集群模式支持ZooKeeper
以及Etcd
持久化 -
spring.shardingsphere.mode.repository.props.namespace=
:注冊(cè)中心命名空間 -
spring.shardingsphere.mode.repository.props.server-lists=
:注冊(cè)中心服務(wù)器列表 -
spring.shardingsphere.mode.overwrite=
:是否覆蓋 -
spring.shardingsphere.mode.repository.props.
:注冊(cè)中心的屬性配置,對(duì)于= ZooKeeper
,可以配置retryIntervalMilliseconds
(重試間隔毫秒)、maxRetries
(客戶(hù)端連接最大重試數(shù))、timeToLiveSeconds
(臨時(shí)數(shù)據(jù)存活秒數(shù))、operationTimeoutMilliseconds
(客戶(hù)端操作超時(shí)毫秒數(shù))、digest
(登錄密碼),對(duì)于Etcd
,可以配置timeToLiveSeconds
(臨時(shí)數(shù)據(jù)存活秒數(shù))、connectionTimeout
(連接超時(shí)秒數(shù))
5.3.2 數(shù)據(jù)源配置
spring.shardingsphere.datasource.names
,后面接數(shù)據(jù)源的名稱(chēng),使用,
分隔,比如此處有兩個(gè)數(shù)據(jù)源:-
master
-
slave
-
type
:數(shù)據(jù)庫(kù)連接池類(lèi)型,這里使用的是Druid
-
username
:用戶(hù)名 -
password
:密碼 -
jdbc-url
:連接url
,注意,對(duì)于此處使用的Druid
連接池,需要使用url
而不是jdbc-url
5.3.3 讀寫(xiě)分離規(guī)則配置
spring.shardingsphere.rules.readwrite-splitting
,需要配置其中的數(shù)據(jù)源以及負(fù)載均衡類(lèi)型:-
spring.shardingsphere.rules.readwrite-splitting.data-sources
-
spring.shardingsphere.rules.readwrite-splitting.load-balancers
5.3.3.1 數(shù)據(jù)源配置
數(shù)據(jù)源配置首先需要添加一個(gè)數(shù)據(jù)源的名字,隨便起一個(gè),比如這里是random
,然后需要配置三個(gè)屬性:-
spring.shardingsphere.rules.readwrite-splitting.data-sources.random.type
:讀寫(xiě)分離的類(lèi)型,可選值為Static
與Dynamic
,這里選擇Static
,如果選擇Dynamic
,也就是動(dòng)態(tài)數(shù)據(jù)源,請(qǐng)配合dynamic-datasource-spring-boot-starter
使用 -
spring.shardingsphere.rules.readwrite-splitting.data-sources.random.props.write-data-source-name
:寫(xiě)數(shù)據(jù)源 -
spring.shardingsphere.rules.readwrite-splitting.data-sources.random.props.read-data-source-name
:讀數(shù)據(jù)源 -
spring.shardingsphere.rules.readwrite-splitting.data-sources.random.load-balancer-name
:負(fù)載均衡算法的名稱(chēng),這里寫(xiě)的是round_robin
5.3.3.2 負(fù)載均衡配置
負(fù)載均衡配置需要與上面的spring.shardingsphere.rules.readwrite-splitting.data-sources.random.load-balancer-name
屬性對(duì)應(yīng),比如這里是round_robin
,那么需要配置的就是spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin
。然后下一步就是配置具體的負(fù)載均衡算法。內(nèi)置的負(fù)載均衡算法有三個(gè):-
輪詢(xún)算法:
ROUND_ROBIN
,配置type=ROUND_ROBIN
即可,也就是spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
-
隨機(jī)訪問(wèn)算法:
RANDOM
,配置type=RANDOM
-
權(quán)重訪問(wèn)算法:
WEIGHT
,配置type=WEIGHT
,同時(shí)需要配置props
,在其中配置各個(gè)讀節(jié)點(diǎn)的權(quán)重
5.3.4 屬性配置
屬性的話這里只配置了一個(gè)spring.shardingsphere.props.sql-show=true
,也就是打印SQL
,其他支持的屬性有:-
spring.shardingsphere.props.sql-simple
:是否打印簡(jiǎn)單風(fēng)格的SQL
,默認(rèn)為false
-
spring.shardingsphere.props.kernel-exector-size
:設(shè)置任務(wù)處理線程池大小,默認(rèn)為infinite
-
spring.shardingsphere.props.max-connections-size-per-query
:每次查詢(xún)所能使用的最多數(shù)據(jù)庫(kù)連接數(shù),默認(rèn)為1
-
spring.shardingsphere.props.check-table-metadata-enabled
:?jiǎn)?dòng)時(shí)是否檢查分片元數(shù)據(jù)的一致性,默認(rèn)為false
-
spring.shardingsphere.props.check-duplicate-table-enabled
:?jiǎn)?dòng)時(shí)是否檢查重復(fù)表,默認(rèn)為false
-
spring.shardingsphere.props.sql-federation-enabled
:是否開(kāi)啟聯(lián)邦查詢(xún),默認(rèn)為false
5.4 準(zhǔn)備Controller
@RestController @RequestMapping("/user") @RequiredArgsConstructor(onConstructor=@__(@Autowired)) publicclassUserController{ privatefinalUserServiceImpluserService; @GetMapping("/select") publicUserselect(){ returnuserService.getById(1); } @GetMapping("/insert") publicbooleaninsert(){ returnuserService.saveOrUpdate(User.builder().id(3L).name("name3").build()); } }
6 測(cè)試
訪問(wèn)http://localhost:8080/user/insert
,可以看到寫(xiě)操作在主庫(kù)進(jìn)行:訪問(wèn)http://localhost:8080/user/select
,可以看到讀操作在從庫(kù)進(jìn)行:這樣讀寫(xiě)分離就算是完成了。審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3794瀏覽量
64360 -
spring
+關(guān)注
關(guān)注
0文章
340瀏覽量
14338 -
MySQL
+關(guān)注
關(guān)注
1文章
804瀏覽量
26528
原文標(biāo)題:SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫(xiě)分離!
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
MySQL主從復(fù)制原理詳解
簡(jiǎn)單講,MySQL主從復(fù)制就是數(shù)據(jù)寫(xiě)入一臺(tái)服務(wù)器(主服務(wù)器)后,同時(shí)還會(huì)額外寫(xiě)入另外的服務(wù)器(從服務(wù)器)。也就是說(shuō)數(shù)據(jù)會(huì)寫(xiě)多份,這樣做的目的
一個(gè)操作把MySQL主從復(fù)制整崩了
最近公司某項(xiàng)目上反饋mysql主從復(fù)制失敗,被運(yùn)維部門(mén)記了一次大過(guò),影響到了項(xiàng)目的驗(yàn)收推進(jìn),那么究竟是什么原因?qū)е碌哪兀慷?b class='flag-5'>主從復(fù)制的原理又是什么呢?本文就對(duì)排查分析的過(guò)程做
聊聊RocketMQ的主從復(fù)制
RocketMQ 主從復(fù)制是 RocketMQ 高可用機(jī)制之一,數(shù)據(jù)可以從主節(jié)點(diǎn)復(fù)制到一個(gè)或多個(gè)
什么是Redis主從復(fù)制
Redis主從復(fù)制 來(lái)自靈魂的拷問(wèn):什么是Redis主從復(fù)制? 簡(jiǎn)言之就是: 主對(duì)外從對(duì)內(nèi),主可寫(xiě)從不可寫(xiě)
mysql主從復(fù)制三種模式
主從復(fù)制模式:?jiǎn)?b class='flag-5'>主從模式、主從級(jí)聯(lián)模式和組復(fù)制模式。 一、單主從模式: 單
mysql如何實(shí)現(xiàn)主從復(fù)制的具體流程
主從復(fù)制是MySQL數(shù)據(jù)庫(kù)中常用的數(shù)據(jù)復(fù)制技術(shù)之一,它的主要目的是將一個(gè)數(shù)據(jù)庫(kù)服務(wù)器上的數(shù)據(jù)復(fù)制
mysql主從復(fù)制主要有幾種模式
MySQL主從復(fù)制是MySQL數(shù)據(jù)庫(kù)中常用的一種數(shù)據(jù)復(fù)制方式,用于實(shí)現(xiàn)數(shù)據(jù)的備份、負(fù)載均衡、故障恢復(fù)等目的。
mysql主從復(fù)制的原理
實(shí)現(xiàn)數(shù)據(jù)的復(fù)制。 一、主從復(fù)制的基本概念 主數(shù)據(jù)庫(kù)(Master): 負(fù)責(zé)接收客戶(hù)端的寫(xiě)操作,并將這些操作記錄到binlog中。 從數(shù)據(jù)庫(kù)(
mysql主從復(fù)制 混合類(lèi)型的復(fù)制
MySQL主從復(fù)制是一種常用的數(shù)據(jù)復(fù)制技術(shù),可以實(shí)現(xiàn)數(shù)據(jù)從一個(gè)MySQL服務(wù)器(
mysql主從復(fù)制數(shù)據(jù)不一致怎么辦
不一致的原因和解決方法。 一、MySQL主從復(fù)制數(shù)據(jù)不一致的原因 網(wǎng)絡(luò)延遲:主從之間的網(wǎng)絡(luò)延遲導(dǎo)
評(píng)論