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

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

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

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

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

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

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

/var/log/message 系統(tǒng)啟動后的信息和錯誤日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 與安全相關(guān)的日志信息
/var/log/maillog 與郵件相關(guān)的日志信息
/var/log/cron 與定時任務(wù)相關(guān)的日志信息
/var/log/spooler 與UUCP和news設(shè)備相關(guān)的日志信息
/var/log/boot.log 守護(hù)進(jìn)程啟動和停止相關(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 某一個數(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))請求連接master,并請求從指定的binlog的指定位置之后開發(fā)發(fā)送內(nèi)容
3.master 接受到slave的io thread(線程)請求之后,master上負(fù)責(zé)復(fù)制的線程dump 線程 ,檢查沒有問題分批讀取指定binlog文件的pos點,然后返回給slave
的io線程(包括master上最新的binlog的pos點(下一次更新的))
4.slave的 io線程收到信息就寫入到中繼日志,并將master上最新的binlog pos點保存至master-info中
5.slave的sql線程會實時檢測中繼日志中io線程新增的sql語句,然后按照順序在服務(wù)器執(zhí)行和應(yīng)用,并將中繼日志的文件和pos點記錄relay-info中
實驗主從服務(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的點
第五步:在從服務(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的點,master_log_pos=pos的點';
第八步:start slave
show slave statusG查看狀態(tài)
第九步:在主服務(wù)器數(shù)據(jù)庫中創(chuàng)建一個數(shù)據(jù)庫:create database class7;
第十步:create table class7.test(age int);
insert into class7.test values (1),(2),(3);
select * from class7 .test;
在另一臺服務(wù)器上也select * from class7.test; \這十步一主一從
一主多從 第十一步:在第三臺從服務(wù)器上/etc/my.cnf下添加server-id=3 重啟mysqld
第十二步:編寫一個腳本 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點的起點
master_log_pos=154;pos點的終止點
EOF



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


?

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

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