一篇文章看懂MySQL主從復(fù)制與讀寫(xiě)分離
引言
企業(yè)中的業(yè)務(wù)通常數(shù)據(jù)量都比較大,而單臺(tái)數(shù)據(jù)庫(kù)在數(shù)據(jù)存儲(chǔ)、安全性和高并發(fā)方面都無(wú)法滿(mǎn)足實(shí)際的需求,所以需要配置多臺(tái)主從數(shù)據(jù)服務(wù)器,以實(shí)現(xiàn)主從復(fù)制,增加數(shù)據(jù)可靠性,讀寫(xiě)分離,也減少數(shù)據(jù)庫(kù)壓力和存儲(chǔ)引擎帶來(lái)的表鎖定和行鎖定問(wèn)題。
一、MySQL主從復(fù)制
在實(shí)際的生產(chǎn)環(huán)境中,對(duì)數(shù)據(jù)庫(kù)的讀和寫(xiě)都在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中,是不能滿(mǎn)足實(shí)際需求的。無(wú)論是在安全性、高可用性還是高并發(fā)等各個(gè)方面都是完全不能滿(mǎn)足實(shí)際需求的。因此,通過(guò)主從復(fù)制的方式來(lái)同步數(shù)據(jù),再通過(guò)讀寫(xiě)分離來(lái)提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力。有點(diǎn)類(lèi)似于rsync,但是不同的是rsync是對(duì)磁盤(pán)文件做備份,而mysql主從復(fù)制是對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)、語(yǔ)句做備份。
1、MySQL的復(fù)制類(lèi)型
(1)基于語(yǔ)句的復(fù)制(STATEMENT)
在服務(wù)器上執(zhí)行sql語(yǔ)句,在從服務(wù)器上執(zhí)行同樣的語(yǔ)句,mysql默認(rèn)采用基于語(yǔ)句的復(fù)制,執(zhí)行效率高。
(2)基于行的復(fù)制(ROW)
把改變的內(nèi)容復(fù)制過(guò)去,而不是把命令在從服務(wù)器上執(zhí)行一遍。
(3)混合類(lèi)型的輔助(MIXED)
默認(rèn)采用基于語(yǔ)句的復(fù)制,一旦發(fā)現(xiàn)基于語(yǔ)句無(wú)法精確復(fù)制時(shí),就會(huì)采用基于行的復(fù)制。
2、MySQL主從復(fù)制的原理
(1)Master節(jié)點(diǎn)將數(shù)據(jù)的改變記錄成二進(jìn)制日志(bin log),當(dāng)Master上的數(shù)據(jù)發(fā)生改變時(shí),則將其改變寫(xiě)入二進(jìn)制日志中。
(2)Slave節(jié)點(diǎn)會(huì)在一定時(shí)間間隔內(nèi)對(duì)Master的二進(jìn)制日志進(jìn)行探測(cè)其是否發(fā)生改變,如果發(fā)生改變,則開(kāi)始一個(gè)I/O線程請(qǐng)求 Master的二進(jìn)制事件。
(3)同時(shí)Master節(jié)點(diǎn)為每個(gè)I/O線程啟動(dòng)一個(gè)dump線程,用于向其發(fā)送二進(jìn)制事件,并保存至Slave節(jié)點(diǎn)本地的中繼日志(Relay log)中,Slave節(jié)點(diǎn)將啟動(dòng)SQL線程從中繼日志中讀取二進(jìn)制日志,在本地重放,即解析成 sql 語(yǔ)句逐一執(zhí)行,使得其數(shù)據(jù)和 Master節(jié)點(diǎn)的保持一致,最后I/O線程和SQL線程將進(jìn)入睡眠狀態(tài),等待下一次被喚醒。

注:中繼日志通常會(huì)位于 OS 緩存中,所以中繼日志的開(kāi)銷(xiāo)很小。復(fù)制過(guò)程有一個(gè)很重要的限制,即復(fù)制在 Slave上是串行化的,也就是說(shuō) Master上的并行更新操作不能在 Slave上并行操作。
3、MySQL主從復(fù)制延遲
①master服務(wù)器高并發(fā),形成大量事務(wù)
②網(wǎng)絡(luò)延遲
③主從硬件設(shè)備導(dǎo)致
cpu主頻、內(nèi)存io、硬盤(pán)io
④本來(lái)就不是同步復(fù)制、而是異步復(fù)制
從庫(kù)優(yōu)化Mysql參數(shù)。比如增大innodb_buffer_pool_size,讓更多操作在Mysql內(nèi)存中完成,減少磁盤(pán)操作。
從庫(kù)使用高性能主機(jī)。包括cpu強(qiáng)悍、內(nèi)存加大。避免使用虛擬云主機(jī),使用物理主機(jī),這樣提升了i/o方面性。
從庫(kù)使用SSD磁盤(pán)
網(wǎng)絡(luò)優(yōu)化,避免跨機(jī)房實(shí)現(xiàn)同步
二、MySQL讀寫(xiě)分離
讀寫(xiě)分離,基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫(kù)處理SELECT查詢(xún)操作。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)不一定要讀寫(xiě)分離,如果程序使用數(shù)據(jù)庫(kù)較多時(shí),而更新少,查詢(xún)多的情況下會(huì)考慮使用。利用數(shù)據(jù)庫(kù)主從同步,再通過(guò)讀寫(xiě)分離可以分擔(dān)數(shù)據(jù)庫(kù)壓力,提高性能。
1、常見(jiàn)的 MySQL 讀寫(xiě)分離分
(1)基于程序代碼內(nèi)部實(shí)現(xiàn)
在代碼中根據(jù) select、insert 進(jìn)行路由分類(lèi),這類(lèi)方法也是目前生產(chǎn)環(huán)境應(yīng)用最廣泛的。優(yōu)點(diǎn)是性能較好,因?yàn)樵诔绦虼a中實(shí)現(xiàn),不需要增加額外的設(shè)備為硬件開(kāi)支;缺點(diǎn)是需要開(kāi)發(fā)人員來(lái)實(shí)現(xiàn),運(yùn)維人員無(wú)從下手。但是并不是所有的應(yīng)用都適合在程序代碼中實(shí)現(xiàn)讀寫(xiě)分離,像一些大型復(fù)雜的Java應(yīng)用,如果在程序代碼中實(shí)現(xiàn)讀寫(xiě)分離對(duì)代碼改動(dòng)就較大。
(2)基于中間代理層實(shí)現(xiàn)
代理一般位于客戶(hù)端和服務(wù)器之間,代理服務(wù)器接到客戶(hù)端請(qǐng)求后通過(guò)判斷后轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫(kù),有以下代表性程序。
①M(fèi)ySQL-Proxy。MySQL-Proxy 為 MySQL 開(kāi)源項(xiàng)目,通過(guò)其自帶的 lua 腳本進(jìn)行SQL 判斷。
②Atlas。是由奇虎360的Web平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開(kāi)發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它是在mysql-proxy 0.8.2版本的基礎(chǔ)上,對(duì)其進(jìn)行了優(yōu)化,增加了一些新的功能特性。360內(nèi)部使用Atlas運(yùn)行的mysql業(yè)務(wù),每天承載的讀寫(xiě)請(qǐng)求數(shù)達(dá)幾十億條。支持事物以及存儲(chǔ)過(guò)程。
③Amoeba。由陳思儒開(kāi)發(fā),作者曾就職于阿里巴巴。該程序由Java語(yǔ)言進(jìn)行開(kāi)發(fā),阿里巴巴將其用于生產(chǎn)環(huán)境。但是它不支持事務(wù)和存儲(chǔ)過(guò)程。
由于使用MySQL Proxy 需要寫(xiě)大量的Lua腳本,這些Lua并不是現(xiàn)成的,而是需要自己去寫(xiě)。這對(duì)于并不熟悉MySQL Proxy內(nèi)置變量和MySQL Protocol 的人來(lái)說(shuō)是非常困難的。Amoeba是一個(gè)非常容易使用、可移植性非常強(qiáng)的軟件。因此它在生產(chǎn)環(huán)境中被廣泛應(yīng)用于數(shù)據(jù)庫(kù)的代理層。
2、MySQL 讀寫(xiě)分離原理
讀寫(xiě)分離就是只在主服務(wù)器上寫(xiě),只在從服務(wù)器上讀?;镜脑硎亲屩鲾?shù)據(jù)庫(kù)處理事務(wù)性操作,而從數(shù)據(jù)庫(kù)處理 select 查詢(xún)。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把主數(shù)據(jù)庫(kù)上事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)。
三、MySQL主從復(fù)制與讀寫(xiě)分離配置步驟

1、搭建環(huán)境
|
主機(jī) |
IP 地址 |
主要軟件 |
|
Master 服務(wù)器 |
192.168.32.128 |
mysql5.7 |
|
Slave1 服務(wù)器 |
192.168.32.133 |
mysql5.7 |
|
Slave2 服務(wù)器 |
192.168.32.134 |
mysql5.7 |
|
Amoeba 服務(wù)器 |
192.168.32.135 |
jdk1.6、Amoeba |
|
客戶(hù)端 |
192.168.32.136 |
mysql |
2、解決需要
客戶(hù)端訪問(wèn)代理服務(wù)器;代理服務(wù)器寫(xiě)入到主服務(wù)器;主服務(wù)器將增刪改寫(xiě)入自己二進(jìn)制日志;從服務(wù)器將主服務(wù)器的二進(jìn)制日志同步至自己中繼日志;從服務(wù)器重放中繼日志到數(shù)據(jù)庫(kù)中;客戶(hù)端讀,則代理服務(wù)器直接訪問(wèn)從服務(wù)器;降低負(fù)載,起到負(fù)載均衡作用。
3、準(zhǔn)備階段(關(guān)閉防火墻及控制訪問(wèn)機(jī)制)
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# setenforce 0
4、搭建MySQL主從復(fù)制
(1)Mysql主從服務(wù)器時(shí)間同步配置步驟
①M(fèi)aster 服務(wù)器(192.168.32.128)配置
[root@localhost ~]# yum -y install ntp #安裝ntp [root@localhost ~]# vim /etc/ntp.conf #配置ntp #25行添加以下內(nèi)容 server 127.127.32.0 #設(shè)置本地是時(shí)鐘源,注意修改網(wǎng)段 fudge 127.127.32.0 stratum 8 #設(shè)置時(shí)間層級(jí)為8(限制在15內(nèi)) [root@localhost ~]# systemctl restart ntpd #重啟ntp服務(wù) ②Slave1 服務(wù)器(192.168.32.133)和Slave2服務(wù)器(192.168.32.134)配置 [root@localhost ~]# yum -y install ntp ntpdate #安裝服務(wù),ntpdate用于同步時(shí)間 [root@localhost ~]# systemctl start ntpd #開(kāi)啟服務(wù) [root@localhost ~]# /usr/sbin/ntpdate 192.168.32.128 #進(jìn)行時(shí)間同步,指向Master服務(wù)器IP [root@localhost ~]# crontab -e */30 * * * * /usr/sbin/ntpdate 192.168.32.128 #寫(xiě)入計(jì)劃性任務(wù),每半小時(shí)進(jìn)行一次時(shí)間同步
(2)配置Master 服務(wù)器(192.168.32.128)
[root@localhost ~]# vim /etc/my.cnf server-id = 1 #注意id不能相同 log-bin=master-bin #添加,主服務(wù)器開(kāi)啟二進(jìn)制日志 log-slave-updates=true #添加,允許從服務(wù)器更新二進(jìn)制日志 [root@localhost ~]# systemctl restart mysqld #重啟服務(wù)使配置生效 [root@localhost ~]# mysql -uroot -p123456 #登錄數(shù)據(jù)庫(kù)程序 mysql> grant replication slave on *.* to 'myslave'@'192.168.32.%' identified by '123456'; #給從服務(wù)器授權(quán) mysql> flush privileges; mysql> show master status; #File 列顯示日志名,F(xiàn)osition 列顯示偏移量

(3)Slave1 服務(wù)器(192.168.32.133)和Slave2服務(wù)器(192.168.32.134)配置
①Slave1 服務(wù)器(192.168.32.133)配置
[root@localhost ~]# vim /etc/my.cnf server-id = 2 #修改,注意id與Master的不同,兩個(gè)Slave的id也要不同 relay-log=relay-log-bin #添加,開(kāi)啟中繼日志,從主服務(wù)器上同步日志文件記錄到本地 relay-log-index=slave-relay-bin.index #添加,定義中繼日志文件的位置和名稱(chēng) mysql> change master to master_host='192.168.32.128',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603; #配置同步,注意 master_log_file 和 master_log_pos 的值要與Master的一致 mysql> start slave; #啟動(dòng)同步,如有報(bào)錯(cuò)執(zhí)行 reset slave; mysql> show slave status\G #查看 Slave 狀態(tài)(確保 IO 和 SQL 線程都是 Yes,代表同步正常) Slave_IO_Running: Yes #負(fù)責(zé)與主機(jī)的io通信 Slave_SQL_Running: Yes #負(fù)責(zé)自己的slave mysql進(jìn)程

②Slave2服務(wù)器(192.168.32.134)配置
[root@localhost ~]# vim /etc/my.cnf server-id = 3 #修改,注意id與Master的不同,兩個(gè)Slave的id也要不同 relay-log=relay-log-bin #添加,開(kāi)啟中繼日志,從主服務(wù)器上同步日志文件記錄到本地 relay-log-index=slave-relay-bin.index #添加,定義中繼日志文件的位置和名稱(chēng) mysql> change master to master_host='192.168.32.128',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603; #配置同步,注意 master_log_file 和 master_log_pos 的值要與Master的一致 mysql> start slave; #啟動(dòng)同步,如有報(bào)錯(cuò)執(zhí)行 reset slave; mysql> show slave status\G #查看 Slave 狀態(tài)(確保 IO 和 SQL 線程都是 Yes,代表同步正常) Slave_IO_Running: Yes #負(fù)責(zé)與主機(jī)的io通信 Slave_SQL_Running: Yes #負(fù)責(zé)自己的slave mysql進(jìn)程

一般 Slave_IO_Running: No 的可能性:網(wǎng)絡(luò)不通;my.cnf配置有問(wèn)題;密碼、file文件名、pos偏移量不對(duì);防火墻沒(méi)有關(guān)閉。
(4)驗(yàn)證主從復(fù)制效果
①主服務(wù)器上進(jìn)入執(zhí)行,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)名為“mysql01”

②兩臺(tái)從服務(wù)器上驗(yàn)證

5、搭建MySQL讀寫(xiě)分離步驟
這個(gè)軟件致力于MySQL的分布式數(shù)據(jù)庫(kù)前端代理層,它主要為應(yīng)用層訪問(wèn) MySQL時(shí)充當(dāng)SQL路由,并具有負(fù)載均衡、高可用性、SQL 過(guò)濾、讀寫(xiě)分離、可路由相關(guān)到目標(biāo)數(shù)據(jù)庫(kù)、可并發(fā)請(qǐng)求多臺(tái)數(shù)據(jù)庫(kù),通過(guò) Amoeba 能夠完成多數(shù)據(jù)源的高可用、負(fù)載均衡、數(shù)據(jù)切片的功能。
(1)Amoeba服務(wù)器配置,安裝Java環(huán)境(因?yàn)锳moeba基于是jdk1.5開(kāi)發(fā)的,所以官方推薦使用jdk1.5或1.6版本,高版本不建議使用。)
[root@localhost ~]# cd /opt/ [root@localhost opt]# ls amoeba-mysql-binary-2.2.0.tar.gz jdk-6u14-linux-x64.bin [root@localhost opt]# cp jdk-6u14-linux-x64.bin /usr/local/ [root@localhost opt]# cd /usr/local/ [root@localhost local]# chmod +x jdk-6u14-linux-x64.bin [root@localhost local]# ./jdk-6u14-linux-x64.bin #按住Enter鍵不動(dòng)一直到最下面,有提示輸入“yes”回車(chē)即可 [root@localhost local]# mv jdk1.6.0_14/ /usr/local/jdk1.6 #遷移并改名 [root@localhost local]# vim /etc/profile #編輯全局配置文件,在最后一行添加以下配置 export JAVA_HOME=/usr/local/jdk1.6 #輸出定義Java的工作目錄 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib #輸出指定的java類(lèi)型 export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin #將java加入路徑環(huán)境變量 export AMOEBA_HOME=/usr/local/amoeba #輸出定義amoeba工作目錄 export PATH=$PATH:$AMOEBA_HOME/bin #加入路徑環(huán)境變量 [root@localhost local]# source /etc/profile #執(zhí)行修改后的全局配置文件 [root@localhost local]# java -version #查看java版本信息以檢查是否安裝成功

(2)安裝并配置Amoeba
[root@localhost ~]# mkdir /usr/local/amoeba [root@localhost ~]# tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ [root@localhost ~]# chmod -R 755 /usr/local/amoeba/ [root@localhost ~]# /usr/local/amoeba/bin/amoeba #顯示amoeba start|stop說(shuō)明安裝成功
(3)配置Amowba服務(wù)器讀寫(xiě)分離,兩個(gè)slave讀寫(xiě)負(fù)載均衡
①先在Master、Slave1、Slave2的mysql上開(kāi)放權(quán)限給Amoeba訪問(wèn)
Master 服務(wù)器(192.168.32.128)、Slave1 服務(wù)器(192.168.32.133)和Slave2服務(wù)器(192.168.32.134)都配置:
mysql> grant all on *.* to test@'192.168.32.%' identified by '123.com';
②在Amoeba服務(wù)器中編輯amoeba.xml配置文件
[root@localhost ~]# cd /usr/local/amoeba/conf/ [root@localhost conf]# cp amoeba.xml amoeba.xml.bak #備份 [root@localhost conf]# vim amoeba.xml #修改amoeba配置文件 #30行修改 <property name="user">amoeba</property> #32行修改 <property name="password">123123</property> #115行修改 <property name="defaultPool">master</property> #117去掉注釋 <property name="writePool">master</property> <property name="readPool">slaves</property>
③編輯dbServers.xml 配置文件
[root@localhost conf]# cp dbServers.xml dbServers.xml.bak #備份 [root@localhost conf]# vim dbServers.xml #修改數(shù)據(jù)庫(kù)配置文件 #23行注釋掉 作用:默認(rèn)進(jìn)入test庫(kù) 以防m(xù)ysql中沒(méi)有test庫(kù)時(shí),會(huì)報(bào)錯(cuò) <!-- <property name="schema">test</property> --> #26行修改 <property name="user">test</property> #28-30行去掉注釋 <!-- mysql password --> <property name="password">123.com</property> #45行修改,設(shè)置主服務(wù)器的名Master <dbServer name="master" parent="abstractServer"> #48行修改,設(shè)置主服務(wù)器的地址 <property name="ipAddress">192.168.32.128</property> #52行修改,設(shè)置從服務(wù)器的名slave1 <dbServer name="slave1" parent="abstractServer"> #55行修改,設(shè)置從服務(wù)器1的地址 <property name="ipAddress">192.168.132.133</property> #58行復(fù)制上面6行粘貼,設(shè)置從服務(wù)器2的名slave2和地址 <dbServer name="slave2" parent="abstractServer"> <property name="ipAddress">192.168.32.134</property> #65行修改 <dbServer name="slaves" virtual="true"> #71修改 <property name="poolNames">slave1,slave2</property>
④確定配置無(wú)誤后,可以啟動(dòng) Amoeba 軟件,其默認(rèn)端口為 tcp 8066
[root@localhost conf]# /usr/local/amoeba/bin/amoeba start &
[root@localhost conf]# netstat -antulp | grep 8066
![]()
6、測(cè)試測(cè)試讀寫(xiě)分離
(1)客戶(hù)端配置
[root@localhost ~]# yum install -y mariadb-server mariadb #用YUM快速安裝MySQL虛擬客戶(hù)端 [root@localhost ~]# systemctl start mariadb.service [root@localhost ~]# mysql -u amoeba -p123456 -h 192.168.32.135 -P8066 #通過(guò)amoeba服務(wù)器代理訪問(wèn)mysql ,在通過(guò)客戶(hù)端連接mysql后寫(xiě)入的數(shù)據(jù)只有主服務(wù)會(huì)記錄,然后同步給從--從服務(wù)器
(2)在 Master服務(wù)器上創(chuàng)建一個(gè)表,同步到兩個(gè)從服務(wù)器上
mysql> use xm; mysql> create table test (id int(10),name varchar(10),address varchar(20));
(3)然后關(guān)閉從服務(wù)器的 Slave 功能,從主服務(wù)器上同步了表,手動(dòng)插入數(shù)據(jù)內(nèi)容
mysql> stop slave; #關(guān)閉同步 mysql> use xm;
①在slave1配置
mysql> insert into test values('1','zhangsan','this_is_slave1');
②在slave2配置
mysql> insert into test values('2','lisi','this_is_slave2');
(4)再回到主服務(wù)器上插入其他內(nèi)容
mysql> insert into test values('3','wangwu','this_is_master');
(5)測(cè)試讀操作,前往客戶(hù)端主機(jī)查詢(xún)結(jié)果
mysql> use xm; mysql> select * from test; #客戶(hù)端會(huì)分別向slave1和slave2讀取數(shù)據(jù),顯示的只有在兩個(gè)從服務(wù)器上添加的數(shù)據(jù),沒(méi)有在主服務(wù)器上添加的數(shù)據(jù)
(6)在客戶(hù)端上插入一條語(yǔ)句,但是在客戶(hù)端上查詢(xún)不到,最終只有在 Master 上才上查看到這條語(yǔ)句內(nèi)容,說(shuō)明寫(xiě)操作在 Master 服務(wù)器上
mysql>insert into test values('4','kanglong','this_is_client'); #只有主服務(wù)器上有此數(shù)據(jù)
(7)在兩個(gè)從服務(wù)器上執(zhí)行 start slave; 即可實(shí)現(xiàn)同步在主服務(wù)器上添加的數(shù)據(jù)
mysql> start slave;
總結(jié)
1、主從復(fù)制的原理:主服務(wù)器進(jìn)行增刪改查數(shù)據(jù)更新,提交事務(wù)后,會(huì)寫(xiě)入到二進(jìn)制文件。從服務(wù)器的I/O線程請(qǐng)求探測(cè)主服務(wù)器的二進(jìn)制文件,有新的數(shù)據(jù)時(shí),主服務(wù)器會(huì)用dump線程將二進(jìn)制文件發(fā)送給從服務(wù)I/O線程內(nèi)存中,并寫(xiě)入到中繼日志,SQL線程會(huì)偵聽(tīng)中繼日志文件,有新的數(shù)據(jù)會(huì)讀取中繼日志文件,并將數(shù)據(jù)重放到從服務(wù)器數(shù)據(jù)庫(kù)中。
2、主從復(fù)制的工作過(guò)程是基于日志:master二進(jìn)制日志和slave中繼日志;請(qǐng)求方式:I/O線程、dump線程、SQL線程。
3、讀寫(xiě)分離就是只在主服務(wù)器上寫(xiě),只在從服務(wù)器上讀。
到此這篇關(guān)于MySQL主從復(fù)制與讀寫(xiě)分離的文章就介紹到這了,更多相關(guān)MySQL主從復(fù)制與讀寫(xiě)分離內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot多數(shù)據(jù)源配合docker部署mysql主從實(shí)現(xiàn)讀寫(xiě)分離效果
- Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫(xiě)分離的示例代碼
- Mysql數(shù)據(jù)庫(kù)的主從復(fù)制與讀寫(xiě)分離精講教程
- MySQL數(shù)據(jù)庫(kù)主從復(fù)制與讀寫(xiě)分離
- 分享MySQL?主從延遲與讀寫(xiě)分離的七種解決方案
- SpringBoot項(xiàng)目中如何實(shí)現(xiàn)MySQL讀寫(xiě)分離詳解
- MySQL讀寫(xiě)分離原理詳細(xì)解析
相關(guān)文章
mysql中distinct和group?by的區(qū)別淺析
distinct簡(jiǎn)單來(lái)說(shuō)就是用來(lái)去重的,而group by的設(shè)計(jì)目的則是用來(lái)聚合統(tǒng)計(jì)的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應(yīng)該仔細(xì)區(qū)分,下面這篇文章主要給大家介紹了關(guān)于mysql中distinct和group?by區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-05-05
mysql max 與 where 間的執(zhí)行問(wèn)題小結(jié)
這篇文章主要介紹了mysql max 與 where 間的執(zhí)行問(wèn)題小結(jié),需要的朋友可以參考下2018-01-01
centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法
這篇文章主要介紹了centos上安裝mysql并設(shè)置遠(yuǎn)程訪問(wèn)的操作方法,需要的朋友可以參考下2017-11-11
Windows安裝MySQL8.0時(shí)的報(bào)錯(cuò)匯總及解決方案
據(jù)說(shuō)安裝MySQL是無(wú)數(shù)數(shù)據(jù)庫(kù)初學(xué)者的噩夢(mèng),我在安裝的時(shí)候也是查了很多資料,但是很多畢竟每個(gè)人的電腦有各自不同的情況,大家的報(bào)錯(cuò)也不盡相同,所以也是很長(zhǎng)時(shí)間之后才安裝成功,所以本文給大家匯總了Windows安裝MySQL8.0時(shí)的報(bào)錯(cuò)解決方案,需要的朋友可以參考下2024-09-09
MySQL使用binlog日志進(jìn)行數(shù)據(jù)庫(kù)遷移和數(shù)據(jù)恢復(fù)
MySQL的二進(jìn)制日志是MySQL數(shù)據(jù)庫(kù)中非常關(guān)鍵的一個(gè)組件,主要用于記錄所有數(shù)據(jù)庫(kù)表結(jié)構(gòu)或表數(shù)據(jù)改變的操作語(yǔ)句,binlog是MySQL數(shù)據(jù)復(fù)制的基礎(chǔ),并且常常被用于數(shù)據(jù)恢復(fù),本文給大家介紹了MySQL使用binlog日志進(jìn)行數(shù)據(jù)庫(kù)遷移和數(shù)據(jù)恢復(fù),需要的朋友可以參考下2024-04-04
MySQL中事務(wù)概念的簡(jiǎn)潔學(xué)習(xí)教程
這篇文章主要介紹了MySQL中的事務(wù)概念,是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11
通過(guò)mysqladmin遠(yuǎn)程管理mysql的方法
在一些特殊場(chǎng)景下,想要遠(yuǎn)程重啟mysql,以便讓某些修改能及時(shí)的生效,但是mysql并沒(méi)有提供遠(yuǎn)程重啟的功能,唯一能做的就是遠(yuǎn)程關(guān)閉mysql服務(wù)2013-03-03
解讀索引列中有null值會(huì)不會(huì)使索引失效
這篇文章主要介紹了解讀索引列中有null值會(huì)不會(huì)使索引失效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

