Question

Pourquoi voudriez-vous sauver quelque chose que vous ne pouvez pas récupérer plus tard? Quel est le point?

Était-ce utile?

La solution

Il est utile dans un environnement où répliquée toutes les instructions SQL sont exécutées sur tous les nœuds, mais vous ne souhaitez que certains noeuds pour stocker effectivement le résultat. Ceci est un cas d'utilisation donnée dans la documentation: http: //dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html

D'autres utilisations indiquées dans la documentation comprennent:

  
      
  • Vérification de la syntaxe du fichier de vidage.
  •   
  • Mesure de la surcharge   de consignation binaire, en comparant les performances à l'aide de BLACKHOLE et   sans log binaire activé.
  •   
  • BLACKHOLE est essentiellement un « no-op »   moteur de stockage, il pourrait donc être utilisé pour trouver la performance   goulots d'étranglement non liés au moteur de stockage lui-même.
  •   

Autres conseils

Supposons que vous avez deux ordinateurs, chacun exécutant un serveur MySQL. Un des ordinateurs hôtes la base de données primaire, et le second ordinateurs hôtes répliquant esclave que vous utilisez comme sauvegarde.

Supposons que votre plus serveur principal contient des bases de données ou de tables que vous ne voulez pas sauvegarder. Peut-être qu'ils sont des tables de cache-désabonnement élevé et il n'a pas d'importance si vous perdez leur contenu. Donc, pour économiser de l'espace disque et d'éviter l'utilisation inutile de CPU, mémoire et disque IO, vous utilisez le Options de réplication pour configurer l'esclave d'ignorer les déclarations qui affectent les tableaux que vous ne voulez pas sauvegardé.

Mais étant donné que les filtres de réplication s'appliquent uniquement sur le serveur esclave , les binlogs pour tous instructions exécutées sur le serveur maître doivent encore être transmis sur le réseau. Il y a gaspillage de bande passante être ici; le serveur maître envoie binlogs pour les transactions que l'esclave va simplement de jeter sur les recevoir. Peut-on faire mieux, et éviter l'utilisation de la bande passante inutile?

Oui, nous pouvons, et c'est où le moteur BLACKHOLE entre en jeu. Sur le même ordinateur que le serveur maître est en cours d'exécution sur, nous courons un deuxième processus de mysqld factice, celui-ci l'hébergement d'un BLACKHOLE base de données. Nous configurons ce processus factice pour répliquer à partir de la binlog de processus maître, avec les mêmes options de réplication que l'esclave réel, et de produire un binlog propre. Le binlog de processus factice ne contient plus que les déclarations que les besoins réels esclaves, et il n'a pas fait un travail réel au-delà de filtrer les déclarations indésirables du binlog (car il utilise le moteur BLACKHOLE). Enfin, il faut configurer le vrai esclave réplique de la binlog du processus factice, plutôt que de la binlog du processus maître d'origine. Nous avons maintenant éliminé le trafic réseau inutile entre les deux ordinateurs hébergeant les serveurs maître et esclave.

Cette configuration est ce qui est décrit et illustré (beaucoup plus laconique) par le présent paragraphe et le diagramme Schéma du scénario décrit ci-dessus

En plus de filtrage, les docs aussi allusion cryptique que l'utilisation d'un serveur BLACKHOLE avec binlogging activé « peut être utile en tant que répéteur ... mécanisme » . Ce cas d'utilisation est moins étoffée dans la documentation, mais il est possible d'imaginer un scénario dans lequel ce serait logique. Par exemple, supposons que vous avez beaucoup de serveurs esclaves, tous les ordinateurs sur un réseau local avec des connexions locales rapides les uns aux autres, que tous ont besoin de reproduire de grandes quantités de données à partir d'un esclave à distance qui ne peut être connecté à sur Internet. Vous ne voulez pas les avoir tous des répliques directement dans la zone principale, depuis lors, vous obtenez les mêmes données à plusieurs reprises et en utilisant plusieurs fois plus de bande passante Internet que vous devez. Mais supposons que vous aussi ne veulent pas avoir juste un de vos esclaves existants répliquer du maître et les autres répliquez ce esclave, peut-être parce que vos esclaves sont en cours d'exécution sur des machines beaucoup moins fiables que le maître , ou sont en cours d'exécution d'autres processus qui pourraient tuer la boîte en mangeant toute sa CPU ou de la mémoire, et vous ne voulez pas risquer une panne de logiciel ou de matériel sur la Takin esclave intermédiaireg vers le bas l'ensemble de votre réseau esclave. Que faites-vous?

Un compromis possible serait d'introduire une boîte supplémentaire dans votre réseau esclave d'agir comme l'intermédiaire, d'une fiabilité et des performances plutôt que pour le stockage. Donnez-lui un petit disque SSD fiable et rien ne lui sont destinés en dehors d'un processus de réplication mysqld du maître à distance, et l'ont produit binlogs que les autres esclaves peuvent souscrire. Et, bien sûr, mis en place cet esclave intermédiaire utiliser le moteur BLACKHOLE, de sorte qu'il ne l'espace de stockage pas besoin.

Tant ce et l'esclave de filtrage intermédiaire décrit en détail dans la documentation de bord sont des cas; la plupart des utilisateurs de MySQL ne se retrouvent dans des situations où ils avaient intérêt à utiliser l'une de ces stratégies, nous allons assez d'avantages seul pour justifier de faire le travail pour les mettre réellement en place. Mais au moins théoriquement, le moteur BLACKHOLE peut être utilisé pour créer un noeud intermédiaire dans un réseau de réplication des esclaves en tant que stratégie de conservation de la bande passante, sans avoir besoin de ce noeud pour stocker réellement les données sur le disque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top