当前位置:网站首页>Copie maître - esclave MySQL, séparation lecture - écriture
Copie maître - esclave MySQL, séparation lecture - écriture
2022-07-06 10:55:00 【Pasteurella】
Catalogue des articles
1. MySQLCopie maître - esclave
MySQLLa base de données par défaut prend en charge la réplication maître - esclave,Pas besoin de recourir à d'autres technologies,Il suffit d'une configuration simple dans la base de données.
1.1 Introduction
MySQLLa réplication maître - esclave est un processus de réplication asynchrone,Le niveau inférieur est basé surMysqlLa base de données contient Journal binaire Fonction.C'est un ou plusieursMySQLBase de données(slave,C'est - à - dire:De la bibliothèque)De l'autreMySQLBase de données(master,C'est - à - dire:Bibliothèque principale) Faire une copie du Journal , Puis analysez le journal et appliquez - le à vous - même ,Réalisation finale De la bibliothèque Données et Bibliothèque principale Les données sont cohérentes.MySQLLa copie maître - esclave estMySQL La base de données est autonome ,Sans l'aide d'outils tiers.
Journal binaire:
Journal binaire(BINLOG)Tout est enregistré DDL(Langage de définition des données)Déclarations et DML(Langage de manipulation des données)Déclarations,Mais n'inclut pas les déclarations de requête de données.Ce journal joue un rôle extrêmement important dans la récupération des données en cas de catastrophe,MySQLCopie maître - esclave de, C'est par là.binlogRéalisé.Par défautMySQL Le journal n'est pas ouvert .
MySQLLe principe de la réplication maître - esclave est le suivant::
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-pbprs3V2-1653815055749)(assets/image-20210825110417975.png)]](/img/89/7e48f0b39a609a25c24f36f340a401.png)
MySQLLe processus de copie est divisé en trois étapes:
1). MySQL master Écrire les modifications de données dans le journal binaire( binary log)
2). slaveOui.masterDebinary logCopie de son journal de relais(relay log)
3). slaveRefaire les événements dans le journal de relais,Refléter les changements de données dans ses propres données
1.2 Construction
1.2.1 Travaux préparatoires
Préparer deux serveurs à l'avance , Et installé sur le serveur MySQL,Les informations du serveur sont les suivantes:
| Base de données | IP | Version de la base de données |
|---|---|---|
| Master | 192.168.200.200 | 5.7.25 |
| Slave | 192.168.200.201 | 5.7.25 |
Et faire les préparatifs suivants sur les deux serveurs :
1). Pare - feu ouvert3306Numéro de port
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --list-ports
2). Et démarrer deux serveurs de base de données :
systemctl start mysqld
ConnexionMySQL, Vérifier le démarrage normal
1.2.2 Configuration de la bibliothèque principale
Serveur: 192.168.200.200
1). ModifierMysqlProfil de la base de donnéesvim /etc/my.cnf
Ajouter une configuration en bas :
log-bin=mysql-bin #[Il faut]Activer le journal binaire
server-id=200 #[Il faut]Serveur uniqueID(Unique.)
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-3mR2K105-1653815055753)(assets/image-20210825115719668.png)]](/img/ea/09b70019b08ee364542c7da974ef2b.png)
2). RedémarrerMysqlServices
Directives d'exécution:
systemctl restart mysqld
3). Créer un utilisateur de synchronisation des données et autoriser
Connexionmysql, Et exécuter les instructions suivantes ,Créer un utilisateur et autoriser:
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by '[email protected]';
Note::Là - hautSQL Pour créer un utilisateur
Utilisateurs xiaoming ,
Le mot de passe est [email protected] ,
Et donnerxiaomingL'utilisateur accordeREPLICATION SLAVEAutorité. Couramment utilisé pour établir les permissions d'utilisateur nécessaires à la réplication ,C'est - à - direslaveDoit êtremasterAutoriser les utilisateurs avec cette permission,Peut être copié par cet utilisateur.
MySQL Description de la complexité du mot de passe :
Pour l'instantmysql5.7 Le niveau par défaut de la politique de vérification des mots de passe est MEDIUM , Ce niveau exige que la composition du mot de passe soit : Nombre、Petite lettre、Majuscules 、Caractères spéciaux、Longueur minimale8Bits
4). ConnexionMysqlBase de données,VoirmasterÉtat de synchronisation
Exécutez ce qui suitSQL, Notez les résultats FileEtPositionValeur de
show master status;
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-VG8fEx71-1653815055755)(assets/image-20210825120355600.png)]](/img/b1/1ce767794093ba635b86efa2577b23.png)
Note::Là - hautSQL Pour voir MasterÉtat de, Après ça SQL Ne faites rien après
1.2.3 Configuration à partir de la bibliothèque
Serveur: 192.168.200.201
1). ModifierMysqlProfil de la base de donnéesvim /etc/my.cnf
server-id=201 #[Il faut]Serveur uniqueID
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-1M6BfGh2-1653815055756)(assets/image-20210825125156597.png)]](/img/d9/38e1f9262bed23730f801a0cd14c5d.png)
2). RedémarrerMysqlServices
systemctl restart mysqld
3). ConnexionMysqlBase de données, Définir l'adresse de la bibliothèque principale et l'emplacement de synchronisation
mysql>change master to master_host='192.168.200.200',master_user='xiaoming',master_password='[email protected]',master_log_file='mysql-bin.000001',master_log_pos=154;
mysql>start slave;
Description des paramètres:
A. master_host : De la bibliothèque principaleIPAdresse
B. master_user : Nom d'utilisateur accédant à la bibliothèque principale pour la réplication maître - esclave ( Créé dans la bibliothèque principale ci - dessus )
C. master_password : Mot de passe correspondant au nom d'utilisateur accédant à la bibliothèque principale pour la copie maître - esclave
D. master_log_file : À partir de quel fichier journal commencer la synchronisation (Requête ci - dessusmaster L'état montre )
E. master_log_pos : Synchroniser à partir de l'emplacement spécifié du fichier journal (Requête ci - dessusmaster L'état montre )
4). Voir l'état de la base de données
show slave status\G;
Ensuite, à travers les informations d'état Slave_IO_running Et Slave_SQL_running Vous pouvez voir si la synchronisation maître - esclave est prête , Si les deux paramètres sont Yes, Indique que la synchronisation maître - esclave a été configurée .
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-uMK7w5mT-1653815055756)(assets/image-20210825142313382.png)]](/img/8f/e2222a80b21b30403279da946f5a99.png)
MySQLCompétences en ligne de commande:
\G : InMySQLDesqlAprès l'énoncé, ajouter\G, Indique que les résultats de la requête sont imprimés par colonne , Vous pouvez imprimer chaque champ sur une ligne séparée . Rotation de la structure à découvrir 90 Le degré devient longitudinal ;
1.3 Tests
- Environnement de réplication maître - esclave ,Déjà construit,Et puis...,On peut passer parNavicat Connectez les deux MySQLServeur,Effectuer des tests.Au moment du test, Tout ce qu'il nous faut, c'est la bibliothèque principale MasterExécution des opérations,Voir à partir de la BibliothèqueSlave Si les données sont synchronisées dans le passé .
1). InmasterCréer une base de données, Rafraîchirslave Voir si vous pouvez synchroniser le passé
2). Inmaster Créer sous les données créées par userTableau, Rafraîchirslave Voir si vous pouvez synchroniser le passé
3). InmasterDeuserInsérer une donnée dans le tableau, Rafraîchirslave Voir si vous pouvez synchroniser le passé
2. Cas de séparation lecture - écriture
2.1 Fiche d'information
Face à un accès accru au système,Le débit de la base de données est confronté à un goulot d'étranglement important. Pour les systèmes d'application avec un grand nombre d'opérations simultanées de lecture et moins de types d'opérations d'écriture en même temps, Diviser la base de données en Bibliothèque principaleEtDe la bibliothèque,La bibliothèque principale est responsable de l'ajout, de la suppression et de la modification transactionnels.,Responsable du traitement des requêtes à partir de la bibliothèque,Peut efficacement éviter le verrouillage de ligne causé par la mise à jour des données,Il améliore considérablement les performances de requête de l'ensemble du système.
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-MdHEgjFU-1653815055759)(assets/image-20210825145647274.png)]](/img/c4/3a26bb6146fc8b6e7023bef996aefe.png)
Séparation par lecture - écriture, Pour réduire la pression d'accès à une seule base de données , Améliorer l'efficacité de l'accès, Il est également possible d'éviter les pannes individuelles .
Structure de la copie maître - esclave ,C'est fait, Besoin d'introduire l'utilisation d'une nouvelle technologie ShardingJDBC,Adoptionjava Code pour compléter la séparation lecture - écriture ,En coursselect Demande à partir de la Bibliothèque ,Et en cours d'exécutioninsert、update、deleteQuand, Fonctionnement de la bibliothèque principale
2.2 ShardingJDBC
Sharding-JDBCPositionné comme légerJavaCadre,InJavaDeJDBCServices supplémentaires fournis par Layer. Il utilise le client pour se connecter directement à la base de données,ParjarServices fournis sous forme de forfaits,Aucun déploiement supplémentaire et aucune dépendance,Peut être interprété comme une version amélioréeJDBCDrive,Entièrement compatibleJDBCEt toutes sortes deORMCadre.
UtiliserSharding-JDBC La séparation lecture - écriture de la base de données peut être facilement réalisée dans le programme .
Sharding-JDBCAvec les caractéristiques suivantes:
Les produits sont indépendants les uns des autresJDBCDeORMCadre,Par exemple::JPA, Hibernate, Mybatis, Spring JDBC TemplatePeut s'appliquer, par exemple:Ou directementJDBC.
Divers scénarios d'application tels que Cloud Native,Par exemple::DBCP, C3P0, BoneCP, Druid, HikariCPAttendez..
S'applique à toute base deJDBCPrise en charge de toute mise en œuvre.Actuellement pris en chargeMySQL,Oracle,SQLServer,PostgreSQLEt toute conformitéSQL92Base de données standard.
Dépendance
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
2.3 Environnement de base de données
Créer une base de données dans la bibliothèque principale rw, Et créer une table , La base de données et la structure de la table sont automatiquement synchronisées à partir de la base de données ,SQLL'énoncé est le suivant:
create database rw default charset utf8mb4;
use rw;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.5 Configuration de séparation lecture - écriture
AjoutershardingJdbcDemavenCoordonnées
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.0.0-RC1</version>
</dependency>
application.ymlAjouter la configuration de la source de données
spring:
shardingsphere:
datasource:
names:
master,slave
# Source principale de données
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.200.200:3306/rw?characterEncoding=utf-8
username: root
password: root
# De la source de données
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.200.201:3306/rw?characterEncoding=utf-8
username: root
password: root
masterslave:
# Équilibrage de la charge、Configuration de séparation lecture - écriture
load-balance-algorithm-type: round_robin #Vote
# Nom de la source de données finale
name: dataSource
# Nom de la source de données de la bibliothèque principale
master-data-source-name: master
# Liste des noms des sources de données de la Bibliothèque,Plusieurs virgules séparées
slave-data-source-names: slave
props:
sql:
show: true #OuvertSQLAfficher,Par défautfalse
#AllowBeanDéfinir les dérogations,shardingCadreJDBCEtDruidCadreJDBC, Parce que les deux objets sources de données doivent être créés BeanConflit
main:
allow-bean-definition-overriding: true
Résolution de configuration:
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-zneIyqG2-1653815055761)(assets/image-20210825162910711.png)]](/img/8c/363d11286e580a336f6054317be1a5.png)
3). Inapplication.ymlAjouter une configuration
spring:
main:
allow-bean-definition-overriding: true
Objet de l'élément de configuration,C'est - à - dire si le même nom existe dans le projet actuelbean,Post - definedbeanLa première définition sera écrasée.
Si vous ne configurez pas cet élément , Une erreur sera signalée après le démarrage du projet :
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-glrZOJ4Z-1653815055762)(assets/image-20210825163737687.png)]](/img/2e/1d403069cd22ae187f8879d7b12564.png)
- Le message d'erreur indique ,Dans une déclaration org.apache.shardingsphere.shardingjdbc.spring.boot EnveloppéSpringBootConfigurationDansdataSourceC'estbeanErreur survenue, La raison en est qu'il y a un dataSource DebeanIncom.alibaba.druid.spring.boot.autoconfigureEnveloppéDruidDataSourceAutoConfigure La classe a été déclarée lors du chargement .
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-zL4KFrGP-1653815055763)(assets/image-20210825164147056.png)]](/img/f4/007b6cba730d1930a7049a129b48db.png)
![[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-SQmUltcc-1653815055763)(assets/image-20210825164227927.png)]](/img/0b/f5dd38915d5688a7b3f0e6ed7d0b02.png)
Et ce qu'il nous faut, c'est shardingjdbcEnveloppédataSource,Nous devons donc configurer les propriétés ci - dessus,Laissez les superpositions chargées plus tard charger en premier.
2.6 Tests
Nous utilisonsshardingjdbcPour réaliser la séparation lecture - écriture, Grâce à la configuration simple décrite ci - dessus .Après la configuration, On peut redémarrer le service ,AdoptionpostmanPour visitercontrollerMéthode, Pour compléter l'ajout, la suppression et la modification de l'information utilisateur ,On peut passer pardebug Et la façon dont le journal peut voir chaque opération d'ajout, de suppression, de modification et de recherche , Quelle source de données est utilisée ,Quelle base de données est connectée.
Utiliser des [email protected]
1). Enregistrer les données
![[(img-MkGx1tLB-1653815055764)(assets/image-20210825170601641.png)]](/img/39/176c4e844f4478e1a78ffe4989673d.png)
Journal de sortie de la console, Vous pouvez voir l'opération masterBibliothèque principale:

2). Modifier les données

Journal de sortie de la console, Vous pouvez voir l'opération masterBibliothèque principale:

3). Recherche de données

Journal de sortie de la console, Vous pouvez voir l'opération slaveBibliothèque principale:

4). Supprimer les données

Journal de sortie de la console, Vous pouvez voir l'opération masterBibliothèque principale:

边栏推荐
- February 13, 2022 - Maximum subarray and
- Other new features of mysql18-mysql8
- [unity] simulate jelly effect (with collision) -- tutorial on using jellysprites plug-in
- Are you monitored by the company for sending resumes and logging in to job search websites? Deeply convinced that the product of "behavior awareness system ba" has not been retrieved on the official w
- C language string function summary
- [BMZCTF-pwn] 11-pwn111111
- Solve the problem that XML, YML and properties file configurations cannot be scanned
- Water and rain condition monitoring reservoir water and rain condition online monitoring
- Mysql35 master slave replication
- MySQL35-主从复制
猜你喜欢
![[C language foundation] 04 judgment and circulation](/img/59/4100971f15a1a9bf3527cbe181d868.jpg)
[C language foundation] 04 judgment and circulation

MySQL19-Linux下MySQL的安装与使用

Case identification based on pytoch pulmonary infection (using RESNET network structure)

【博主推荐】C# Winform定时发送邮箱(附源码)

C language advanced pointer Full Version (array pointer, pointer array discrimination, function pointer)

Mysql27 - Optimisation des index et des requêtes

MySQL20-MySQL的数据目录

Navicat 導出錶生成PDM文件

解决:log4j:WARN Please initialize the log4j system properly.

Postman Interface Association
随机推荐
CSDN博文摘要(一) —— 一个简单的初版实现
解决:log4j:WARN Please initialize the log4j system properly.
API learning of OpenGL (2003) gl_ TEXTURE_ WRAP_ S GL_ TEXTURE_ WRAP_ T
February 13, 2022-2-climbing stairs
npm一个错误 npm ERR code ENOENT npm ERR syscall open
MySQL transaction log
API learning of OpenGL (2002) smooth flat of glsl
[BMZCTF-pwn] 12-csaw-ctf-2016-quals hungman
Mysql30 transaction Basics
MySQL24-索引的数据结构
windows无法启动MYSQL服务(位于本地计算机)错误1067进程意外终止
Development of C language standard
API learning of OpenGL (2005) gl_ MAX_ TEXTURE_ UNITS GL_ MAX_ TEXTURE_ IMAGE_ UNITS_ ARB
Water and rain condition monitoring reservoir water and rain condition online monitoring
数据库中间件_Mycat总结
Global and Chinese market of transfer switches 2022-2028: Research Report on technology, participants, trends, market size and share
API learning of OpenGL (2004) gl_ TEXTURE_ MIN_ FILTER GL_ TEXTURE_ MAG_ FILTER
Mysql35 master slave replication
February 13, 2022 - Maximum subarray and
MySQL21-用户与权限管理
![ [Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-rIQoCaNi-1653815055755)(assets/image-20210825144818269.png)]](/img/f4/19e296cc433ae595f7397860bc141f.png)