Cet article vous présente les connaissances pertinentes sur la séparation en lecture et en écriture MySQL, j'espère qu'il vous sera utile.
MySQL est actuellement la base de données gratuite la plus utilisée au monde. Je pense que tous les ingénieurs impliqués dans l'exploitation et la maintenance du système doivent être entrés en contact avec elle.
Dans un environnement de production réel, un seul MySQL en tant que base de données indépendante est totalement incapable de répondre aux besoins réels, peu importe en termes de sécurité, de haute disponibilité et de haute concurrence.
Par conséquent, de manière générale, les données sont synchronisées via Réplication maître-esclave, puis via séparation lecture-écriture (MySQL-Proxy/Amoeba) pour augmenter la charge simultanée de la base de données. Capacité à déployer et mettre en œuvre. "Le principe de fonctionnement de la séparation en lecture et en écriture"
Pourquoi la séparation en lecture et en écriture
Face à la pression d'accès croissante, les performances d'un serveur unique sont devenues un goulot d'étranglement et la charge doit être partagéeLe moteur myisam peut être configuré à partir de la base de données pour améliorer les performances des requêtes et économiser la surcharge du système
Augmenter la redondance, améliorer la convivialitéIl existe généralement deux façons de l'implémenter
L'implémentation de la couche d'application fait référence à l'intérieur de l'application Et la séparation en lecture et en écriture est réalisée dans le connecteur
Implémentation de la couche middleware :
L'implémentation de la couche middleware fait référence au middleware commun qui implémente la séparation lecture-écriture dans les programmes middleware externes
Kingshard a été développé par Chen Fei de l'ancienne équipe de développement de middleware 360Atlas dans le langage Go pendant son temps libre. Il y a actuellement environ 3 personnes impliquées dans le développement. À l'heure actuelle, ce n'est pas un produit mature et utilisable et doit le faire. être continuellement amélioré.
Atlas :
L'équipe 360 a réécrit Lua en C basé sur un proxy MySQL. La version originale prend en charge le partitionnement de table, et une version de base de données et de table partitionnée a été publiée. J'ai vu des amis sur Internet dire souvent qu'il se bloque souvent en cas de concurrence élevée. Si vous souhaitez l'utiliser, vous devez le tester à l'avance.
MaxScale et MySQL Route :
Ces deux middlewares sont considérés comme officiels. MaxScale est développé par mariadb (une version maintenue par l'auteur original de MySQL). La version actuelle ne prend pas en charge le partitionnement des bases de données et des tables. MySQL Route est un middleware désormais publié par la société Oracle officielle MySQL.
Avantages :
La conception de l'architecture est plus flexible
Vous pouvez implémenter certains contrôles avancés sur le programme, tels que : le fractionnement horizontal transparent, le basculement et la surveillance. Vous pouvez compter sur des moyens techniques pour vous améliorer. l'impact des performances de MySQL sur le code métier Petit et sûr à la fois
Inconvénients :
Nécessite le soutien d'une certaine équipe de développement et d'exploitation.
Un grand cluster de bases de données entièrement open source pour le développement d'applications d'entreprise
prend en charge les transactions, ACID et une version améliorée de la base de données qui peut remplacer MySQL
Il peut être considéré comme une base de données de cluster MySQL au niveau de l'entreprise, utilisée pour remplacer les clusters Oracle coûteux
Un nouveau serveur SQL qui intègre la technologie de mise en cache mémoire, la technologie NoSQL et le big data HDFS
Combine les bases de données traditionnelles et de nouveaux entrepôts de données distribués Une nouvelle génération de produits de base de données au niveau de l'entreprise
Un nouveau produit middleware de base de données
MyCat fournit des packages d'installation compilés, prenant en charge Windows et Linux, Mac, Solaris et autres systèmes à installer et à exécuter
Page d'accueil officielle de téléchargement http://www.mycat.org.cn/
MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH
Faites attention à l'URL ici, une écriture incorrecte entraînera l'échec du démarrage !
< "mesdonnées"/>
.3:3306" user="mycat " password="123456"> Serveur de lecture
;/writeHost>
Forcer toutes les opérations de lecture à s'exécuter sur le serveur de lecture et passer au serveur d'écriture uniquement lorsque les données sont écrites
Notez que l'utilisateur mycat ici doit être autorisé sur la base de données maître-esclave 192.168. 2.3 et 2.5
ACCORDEZ TOUS LES PRIVILÈGES SUR *.* À 'mycat'@'%' IDENTIFIÉ PAR '123456';
ou segment de réseau spécifié
ACCORDEZ TOUS LES PRIVILÈGES SUR *.* À 'mycat '@' 192.168.2.%' IDENTIFIÉ PAR '123456';
flush privilèges;
Si cette erreur est signalée et que le serveur fonctionne normalement, vérifiez d'abord s'il y a une autorisation
ERR OR 1184 (HY000) : Source de données invalide : 0
Schéma : Bibliothèque logique, correspondant à la base de données dans MySQL, une bibliothèque logique définit les éléments inclus Tableau .
table : Table, c'est-à-dire une table stockée dans une base de données physique. Différente des bases de données traditionnelles, la table doit ici déclarer le nœud de données logique DataNode qu'elle stocke. Ceci est réalisé grâce à la définition de règles de partitionnement pour la table. Une table peut définir la "childTable" à laquelle elle appartient. Le partitionnement de la table enfant dépend de l'adresse de partitionnement spécifique de la "table parent". En termes simples, il s'agit de toutes les tables enfants appartenant à un certain enregistrement A dans le parent. table Les enregistrements sont tous stockés sur la même partition que A.
Règle de partitionnement : il s'agit d'une définition groupée d'un champ et d'une fonction. En fonction de la valeur de ce champ, le numéro de séquence du fragment stocké (DataNode) est renvoyé. Chaque table peut définir une règle de partitionnement, et la règle de partitionnement peut. être étendu de manière flexible. Des règles de partitionnement basées sur des nombres, des règles de partitionnement de chaînes, etc. sont fournies par défaut.
dataNode : Le nœud de données logique de MyCAT est un nœud physique spécifique qui stocke les tables. Il est également appelé nœud de partition. Il est associé à une base de données back-end spécifique via DataSource. De manière générale, pour une haute disponibilité, chaque DataNode. est configuré avec deux DataSources, un maître et un esclave. Lorsque le nœud maître tombe en panne, le système passe automatiquement au nœud esclave.
dataHost : Définissez l'adresse d'accès d'une bibliothèque physique pour la liaison à dataNode.
MyCAT définit actuellement les bibliothèques logiques et les configurations associées via des fichiers de configuration :
Les bibliothèques logiques, les tables, les nœuds de partition et autres contenus sont définis dans MYCAT_HOME/conf/schema.xml
Le partage est défini dans les règles MYCAT_HOME/conf/rule.xml ;
Définissez les variables liées à l'utilisateur et au système, telles que les ports, etc. dans MYCAT_HOME/conf/server.xml.
Remarque :
La balise de schéma est utilisée pour définir la bibliothèque logique dans le nom de l'instance MyCat : elle est suivie du nom de la bibliothèque logique. MyCat peut avoir plusieurs bibliothèques logiques, et chaque bibliothèque logique a sa propre configuration associée. Vous pouvez utiliser des balises de schéma pour diviser ces différentes bibliothèques logiques.
L'attribut checkSQLschema est par défaut false. Le document officiel indique s'il faut supprimer le nom de la base de données devant la table, "select * from db1.testtable". S'il est défini sur true, db1 sera supprimé. Mais si le nom de db1 n'est pas le nom du schéma, il ne sera pas supprimé, il est donc officiellement recommandé de ne pas utiliser cette syntaxe. Également défini sur false par défaut.
sqlMaxLimit Lorsque la valeur est définie sur un certain nombre. Pour chaque instruction SQL exécutée, si aucune instruction de limite n'est ajoutée, MyCat ajoutera automatiquement la valeur correspondante. Par exemple, si vous définissez la valeur sur 100 et exécutez « select * from test_table », l'effet sera « select * from test_table limit 100 ». La balise dataNode définit les nœuds de données dans MyCat, ce que nous appelons habituellement le partage de données.
mysql -uroot -p123456 -e " changez le maître en master_host='192.168.2.3', master_user='slave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=245;"
mysql -uroot -p123456 -e "start slave"Vérifiez sur le serveur esclave
S'il y a une erreur de synchronisation, vous devez arrêter l'esclave sur le serveur esclave et puis changez à nouveau le maître
Utilisez le test de connexion de l'utilisateur esclave
pour tester la séparation en lecture et en écriture
Écrire des données ou modifier des données
🎜Thing to Write Data sur 192.168.2.2 🎜🎜insert dans MyData.Mylist Values (7, 'GF'); 🎜🎜🎜🎜🎜🎜🎜Afficher sur le serveur principal 192.168.2.3 🎜🎜🎜 🎜 🎜🎜🎜Ouvrir le serveur esclave 192.168.2.5🎜🎜🎜🎜🎜🎜🎜Simuler le serveur principal 192.168.2.3 temps d'arrêt🎜🎜🎜🎜🎜🎜🎜 🎜
tail /usr/ local/mycat/logs/wrpper.log
Gestion des erreurs
Échec du démarrage : délai d'attente dépassé pour un signal de la JVM.
La JVM ne s'est pas fermée sur demande, s'est terminéeCe 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!