當(dāng)前位置:首頁 > IT技術(shù) > 數(shù)據(jù)庫 > 正文

數(shù)據(jù)庫的主從架構(gòu)及一主一從和一主多從的實(shí)驗(yàn)
2021-09-23 17:40:42

1.主從復(fù)制架構(gòu)和原理

1.Slave 服務(wù)器上執(zhí)行 start slave 命令開啟主從復(fù)制開關(guān),主從復(fù)制開始進(jìn)行
2.此時(shí),Slave 服務(wù)器的 I/O 線程會(huì)通過在 Master 上已經(jīng)授權(quán)的復(fù)制用戶權(quán)限請(qǐng)求連接 Master服務(wù)器,并請(qǐng)求從指定 binlog 日志文件的指定位置(日志文件名和位置就是在配置主從復(fù)制時(shí)執(zhí)行change master 命令指定的)之后開始發(fā)送 binlog 日志內(nèi)容
3.Master服務(wù)器接收到來自 Slave 服務(wù)器的I/O 線程的請(qǐng)求之后,其上負(fù)責(zé)復(fù)制的線程會(huì)根據(jù) Slave 服務(wù)器的I/O線程請(qǐng)求的信息,分批讀取指定 binlog 日文件所指定位置之后的 binlog 日志信息,然后返回給 Slave 端的I/O線程。返回的息中除了binlog 日志內(nèi)容之外,還包括在 Master服務(wù)器端記錄的新binlog 文件件名稱,以及在新的 binlog 中的下一個(gè)指定的更新位置。
4.當(dāng)Slave服務(wù)器的I/O線程獲取到Master 服務(wù)器上I/O 線程發(fā)送的日志內(nèi)容及志文件和位置點(diǎn)之后,會(huì)將 binlog 日志內(nèi)容依次寫入到Slave 端自身的 Relay Log(即中繼日志)文件(MySQL-relay-bin.xxxxx)的最末端,并將新的 binlog 文件名和位置記 master-info 文件中,以便下一次讀取 Master 端新 binlog 日志時(shí),能夠告訴 Master務(wù)器需要從新 binlog 日志的指定文件及位置開始請(qǐng)求新的 binlog 日志內(nèi)容。
5.slave 服務(wù)器端的 SQL線程會(huì)實(shí)時(shí)地檢測本地 Relay Log 中I/O線程新增加的日志內(nèi)容,然后及時(shí)地把Relay Log 文件中的內(nèi)容解析成SQL語句,并在自身 Slave服務(wù)器上按解析 SQL語句的位置順序執(zhí)行和應(yīng)用這些 SQL語句,并將當(dāng)前應(yīng)用中繼日志的文件名及位置點(diǎn)記錄在 relay-log.info 中。

向上擴(kuò)展 垂直擴(kuò)展

向外擴(kuò)展? 橫向擴(kuò)展

[root@localhost ~]# cat /var/log/mysqld.log數(shù)據(jù)庫日志

/var/log/message 系統(tǒng)啟動(dòng)后的信息和錯(cuò)誤日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 與安全相關(guān)的日志信息
/var/log/maillog 與郵件相關(guān)的日志信息
/var/log/cron 與定時(shí)任務(wù)相關(guān)的日志信息
/var/log/spooler 與UUCP和news設(shè)備相關(guān)的日志信息
/var/log/boot.log 守護(hù)進(jìn)程啟動(dòng)和停止相關(guān)的日志消息
系統(tǒng):
二、主從復(fù)制

?


?主從:

主 :開啟 dump thread(線程)作用:服務(wù)slave的 io thread(線程)

?從:開啟 io thread(線程)作用:將主服務(wù)器的二進(jìn)制日志寫入本地中繼日志

? ? ? ? ?開啟 sql thread(線程)作用:將中繼日志中的sql語句在本地重放

主服務(wù)器:要配置server-id? /? log-bin? ? ?

format:行格式出來問題再考慮

grant replication slave on 某一個(gè)數(shù)據(jù)庫 to user@host..密碼..

從服務(wù)器:要配置 server-id 不要開啟log-bchange master 指定從服務(wù)器的同步hostport:port

user:
passwd:
logbin file: show master statusG
pos
1.start slave: stop slave;show slave status;
2.slave io thread 使用user(master授權(quán))請(qǐng)求連接master,并請(qǐng)求從指定的binlog的指定位置之后開發(fā)發(fā)送內(nèi)容
3.master 接受到slave的io thread(線程)請(qǐng)求之后,master上負(fù)責(zé)復(fù)制的線程dump 線程 ,檢查沒有問題分批讀取指定binlog文件的pos點(diǎn),然后返回給slave
的io線程(包括master上最新的binlog的pos點(diǎn)(下一次更新的))
4.slave的 io線程收到信息就寫入到中繼日志,并將master上最新的binlog pos點(diǎn)保存至master-info中
5.slave的sql線程會(huì)實(shí)時(shí)檢測中繼日志中io線程新增的sql語句,然后按照順序在服務(wù)器執(zhí)行和應(yīng)用,并將中繼日志的文件和pos點(diǎn)記錄relay-info中
實(shí)驗(yàn)主從服務(wù)器
關(guān)閉防火墻:systemctl stop firewlld
保證selinux在:
[root@localhost ~]# getenforce

Disabled模式下

第一步:在主服務(wù)器的/etc/my.cnf中添加log-bin=log-bin   /server-id=1
第二步:登錄主服務(wù)器的mysql:grant replication slave on *.* to repl@'192.168.0.%' identified by '123456';
第三步:flush privileges;刷新權(quán)限
第四步:show master statusG 查看pos的點(diǎn)
第五步:在從服務(wù)器的/etc/my.cnf中添加server-id=2
第六步:登錄mysql :change master to master_host='192.168.50.8',
master_port =3306,
master_user='repl',master_password='123456',master_log_file='pos的點(diǎn),master_log_pos=pos的點(diǎn)';
第八步:start slave
show slave statusG查看狀態(tài)
第九步:在主服務(wù)器數(shù)據(jù)庫中創(chuàng)建一個(gè)數(shù)據(jù)庫:create database class7;
第十步:create table class7.test(age int);
insert into class7.test values (1),(2),(3);
select * from class7 .test;
在另一臺(tái)服務(wù)器上也select * from class7.test; \這十步一主一從
一主多從 第十一步:在第三臺(tái)從服務(wù)器上/etc/my.cnf下添加server-id=3 重啟mysqld
第十二步:編寫一個(gè)腳本 vim slave.sh

mysql << EOF
change master to master_host='192.168.158.128',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='log-bin.000002',pos點(diǎn)的起點(diǎn)
master_log_pos=154;pos點(diǎn)的終止點(diǎn)
EOF



bash slave.sh
第十三步:mysql
start slave
show slave statusG


?

本文摘自 :https://www.cnblogs.com/

開通會(huì)員,享受整站包年服務(wù)立即開通 >