Dans un environnement de production réel, si la lecture et l'écriture de la base de données MySQL sont toutes opérées sur un serveur de base de données, elle ne pourra pas répondre aux besoins réels en termes de sécurité, de haute disponibilité ou de haute concurrence. les données sont synchronisées via la réplication maître-esclave, puis la séparation lecture-écriture est utilisée pour améliorer la capacité de charge simultanée de la base de données. 1. Le concept de réplication maître-esclave
La bibliothèque principale (maître) fournit des services externes
d'ajout, de suppression, de modification et de requête de données. Les modifications impliquant des données dans la bibliothèque principale seront écrites dans le binlogLa bibliothèque esclave (esclave) est utilisée pour la synchronisation et sauvegarde des données. , via un fil dédié. Le binlog de la bibliothèque principale synchronise les modifications liées à la bibliothèque principale et aux données, autorisations et structures de table avec la bibliothèque esclave. Cela équivaut à ce que toutes les modifications apportées à la bibliothèque principale soient transmises et réfléchies. la bibliothèque esclave via le mécanisme de réplication maître-esclave. Avantages de la réplication maître-esclave :
sauvegarde des données, nous pouvons même en faire une sauvegarde à chaud, via le middleware MySQL mycat
, tolérance aux catastrophes peut être atteinte, et la reprise après sinistre est également réfléchimycat
,可以实现容灾,容灾也体现了高可用。
容灾:如果主库挂了,由中间件代理mycat自动把服务的请求映射到从库,由从库继续对外提供服务,体现出了高可用性(后端的服务允许一定的异常发生,但是后端的架构服务要可以容错,把这些异常的错误处理掉,并对外重新提供正常的服务)
读写分离是基于主从复制来实现的。在实际的应用环境中,肯定是读操作多,就像我们在电商平台上去购买东西,可能看了100个也就买了一两个。所以读操作永远比写这种更新操作多很多。所以我们基于主从复制的读写分离配置,就是让一个主库专门用来做数据的修改,写的时候专门在主库上写,主库通过主从复制把数据的更改通过binlog同步到从库上去,那么其他的客户端查询的请求都会最终映射到从库上去,而我们一个主库带上两三个从库,主库专门用来做数据的更新(写操作),从库专门用来做读操作这样一来可以很好的分摊读写的压力,不用全部都集中在主库上,对于后端服务的并发处理能力有很大的提高,另外就是它的高可用容灾,当主库挂了以后,可以把指定的从库变成主库。
上图中的binlog,即使我们没有主从复制,也是会写binlog的,只不过主从复制是通过binlog来实现的。
主库master服务器创建一个binlog转储线程,将二进制日志内容发送到从服务器
从库里面专门有一个I/O线程专门读取接收主库发送的内容,它会把主库里面发过来的binlog内容接收并写到一个relay log
Haute disponibilité .
Reprise après sinistre : Si la base de données principale raccroche, l'agent middleware mycat mappe automatiquement les demandes de service à la base de données esclave, et la base de données esclave continue de fournir des services au monde extérieur, reflétant la haute disponibilité
Lire -la séparation en écriture est implémentée sur la base de la réplication maître-esclave. Dans un environnement d'application réel, il doit y avoir de nombreuses opérations de lecture. Tout comme lorsque nous achetons quelque chose sur une plateforme de commerce électronique, nous pouvons n'en acheter qu'un ou deux après avoir consulté 100 articles. Par conséquent, il y a toujours beaucoup plus d’opérations de lecture que d’opérations de mise à jour en écriture. Par conséquent, notre configuration de séparation lecture-écriture basée sur la réplication maître-esclave signifie qu'une base de données maître est dédiée à la modification des données. Lors de l'écriture, elle est écrite exclusivement sur la base de données maître. La base de données maître synchronise les modifications des données sur l'esclave via maître-esclave. réplication via la bibliothèque binlog., puis les autres requêtes du client seront éventuellement mappées à la bibliothèque esclave, et nous avons une bibliothèque principale avec deux ou trois bibliothèques esclaves. La bibliothèque principale est spécialement utilisée pour mettre à jour les données (opérations d'écriture) et l'esclave. La bibliothèque est spécialement utilisée pour mettre à jour les données (opérations d'écriture). Elle est utilisée pour les opérations de lecture, ce qui peut bien répartir la pression de lecture et d'écriture. Elle n'a pas besoin d'être concentrée sur la base de données principale. services back-end. De plus, il offre une haute disponibilité et une reprise après sinistre. Lorsque la bibliothèque principale est en panne, la bibliothèque esclave spécifiée peut être transformée en bibliothèque principale. Image ci-dessus Dans le binlog, même si nous n'avons pas de réplication maître-esclave, le binlog sera toujours écrit, mais la réplication maître-esclave est implémentée via binlog. 3. Bibliothèque principale et bibliothèque esclave
2. Bibliothèque esclave
relay log
, le journal de relais est équivalent à un tampon, de sorte que le maître n'a pas à attendre la fin de l'exécution de l'esclave avant d'envoyer l'événement suivant. Au lieu de lire le contenu du binlog dans la bibliothèque principale et de l'exécuter directement, l'inconvénient de l'exécution directe est que la bibliothèque principale peut avoir beaucoup de contenu du binlog et que l'exécution du contenu du binlog reçu de la bibliothèque esclave peut être très lente, ce qui entraînera des mises à jour de la bibliothèque esclave. L'écart entre les données et la base de données principale deviendra de plus en plus large. La réplication des données peut prendre du retard. La bibliothèque esclave démarrera également un
des opérations correspondantes à partir du journal de relais Tout le SQL est exécuté une fois
, réalisant ainsi 🎜le contenu de la bibliothèque esclave et le contenu. de la bibliothèque principale. Synchronisation 🎜🎜🎜🎜🎜 4. Processus de réplication maître-esclave 🎜🎜🎜Processus de réplication maître-esclave : 🎜Deux journaux (journal binaire binlog et journal du journal de relais) et trois threads (un thread du maître et deux threads). d'esclave) ). 🎜🎜🎜🎜L'opération de mise à jour de la bibliothèque principale est écrite dans le 🎜journal binaire binlog🎜 (la bibliothèque principale doit activer le commutateur binlog) 🎜🎜🎜🎜Le serveur maître crée un 🎜thread de vidage binlog🎜 et envoie le binaire enregistrer le contenu sur le serveur esclave🎜 La machine esclave exécute la commande START SLAVE
et créera un START SLAVE
命令会在从服务器创建一个IO线程,接收master的binary log复制到其中继日志(处于内存中,读写快)。 首先slave开始一个工作线程(I/O线程),I/O线程会主动连接master ,然后主库会开启dump线程,dump线程从master的binlog中读取事件并发送给slave的I/O线程,如果dump线程已经跟上master(主库上的dump线程已经把binlog的内容发完了,而且主库上binlog没有产生更多的内容),dump线程会睡眠并等待binlog产生新的事件,slave的I/O线程接收的事件写入中继日志
slave的SQL线程处理该过程的最后一步,SQL线程从relay log中读取事件,并执行其中的事件更新slave的数据,使其与master的数据同步。只要SQL线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小
linux上的centos作为主库win10上的mysql server作为从库来演示:
主从复制是单向同步,master的更改往slave同步。在设置主从复制时,主从库之间的数据可能不同。一旦配置完成,主库的所有更改将会同步到从库。
master创建mytest数据库:
查看slave,发现mytest同步过来了:
master创建了user表,slave也同步了user表:
现在linux端的MySQL(master)删除mytest库
此时slave的mytest也不存在了
show processlist
IO thread
dump thread. le binlog du maître et les envoie. Pour le thread d'E/S esclave, si le thread de dump a rattrapé le maître (le thread de dump de la bibliothèque principale a fini d'envoyer le contenu du binlog, et le binlog de la bibliothèque principale n'a pas généré plus de contenu), le thread de dump va dormir et attendre le binlog. De nouveaux événements sont générés et les événements reçus par le thread d'E/S de l'esclave sont écrits dans le journal du relais
# 🎜🎜Le thread SQL de l'esclave
gère le processus Dans la dernière étape, le thread SQL lit les événements du journal du relais et exécute les événements pour mettre à jour les données de l'esclave afin qu'elles soient synchronisées avec les données du maître. Tant que le thread SQL est cohérent avec le thread d'E/S, le journal de relais sera généralement situé dans le cache du système d'exploitation, donc la surcharge du journal de relais est très faible5. Démonstration de l'effet de réplication maître-esclave
#🎜🎜#centos sur Linux comme bibliothèque principale et serveur MySQL sur Win10 comme bibliothèque esclave pour démontrer : #🎜🎜##🎜🎜## 🎜🎜## 🎜🎜##🎜🎜#La réplication maître-esclave est une synchronisation unidirectionnelle, les modifications du maître sont synchronisées avec l'esclave. Lors de la configuration de la réplication maître-esclave, les données entre les bases de données maître et esclave peuvent être différentes. Une fois la configuration terminée, toutes les modifications apportées à la base de données maître seront synchronisées avec la base de données esclave. #🎜🎜##🎜🎜##🎜🎜#master crée ma base de données mytest : #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# Vérifiez l'esclave et constatez que mon test a été synchronisé : #🎜🎜 ##🎜🎜 ##🎜🎜##🎜 🎜##🎜🎜##🎜🎜#Le maître a créé la table utilisateur, et l'esclave a également synchronisé la table utilisateur : #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜## 🎜🎜##🎜🎜#Maintenant, supprimez mytest de MySQL (maître) côté Linux Bibliothèque#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#A cette heure, le mytest de l'esclave n'existe plus # 🎜🎜##🎜🎜##🎜🎜#show processlist
peut être consulté Le fil de travail dans l'environnement actuel du maître#🎜🎜##🎜🎜##🎜🎜##🎜🎜## 🎜🎜##🎜🎜#Voir le fil de travail dans l'environnement actuel de l'esclave#🎜🎜##🎜🎜##🎜🎜 ##🎜🎜##🎜🎜#Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!