Concept
Comme MyISAM et InnoDB, BlackHole est un autre moteur MySQL au sens littéral,
il se comporte comme un trou noir, entrant seulement mais ne sortant pas, et disparaissant après y être entré. En d'autres termes, toutes les données qui y sont écrites seront perdues, un peu comme /dev/null de Linux
Par exemple, le moteur d'un test de table est BlackHole, toute insertion dans cette table sera perdue,
Sélectionner dessus reviendra toujours null Ensemble, il n'y a qu'un seul fichier test.frm dans le répertoire de données correspondant et aucun autre fichier ne lui est associé.
Scénarios d'utilisation
A quoi sert un moteur qui ne sauvegarde aucune donnée ?
La clé est que même si les données ne sont pas enregistrées, les opérations sur la base de données sont toujours enregistrées dans le journal binlog.
Cela apporte un avantage, il peut être utilisé comme intermédiaire pour la réplication maître-esclave, et l'opération de synchronisation d'origine à partir de la base de données principale peut être modifiée à partir de la base de données du moteur BlackHole en tant qu'intermédiaire.
1. En tant que bibliothèque pseudo-maître, partagez le fardeau de la bibliothèque principale
Comme nous le savons tous, lorsqu'il existe de nombreuses bibliothèques esclaves, toutes les bibliothèques esclaves chargent les données de la bibliothèque principale, ce qui augmentera la charge de la bibliothèque principale. bibliothèque. Mais si vous synchronisez à partir de la pseudo-bibliothèque principale de BlackHole, vous pouvez réduire la charge sur la bibliothèque principale. L'architecture maître-esclave d'origine ressemble à peu près à la suivante :
现在,BlackHole伪主库作为中介,变成这样:
En particulier, vous pouvez configurer les règles de réplication-faire et de réplication-ignorer dans la base de données pseudo-maître pour filtrer les tables qui n'ont pas besoin d'être synchronisé.
2. En tant que collecteur de journaux binlog
Il ne sauvegarde pas les données réelles, mais enregistre uniquement les caractéristiques du binlog, de sorte que le moteur puisse être utilisé pour la collecte des journaux binlog afin de faciliter l'analyse de la base de données.
Connaissances connexes : Il existe trois formats pour les journaux binlog : ligne, instruction et mixte.
row enregistre les enregistrements modifiés de chaque ligne. En d'autres termes, la mise à jour enregistrera toutes les lignes modifiées qui remplissent les conditions, c'est encore pire, ce qui équivaut à reconstruire la table entière et à enregistrer les modifications de toutes les lignes. Par conséquent, le journal dans ce format est facilement trop volumineux ; la méthode
statement enregistre uniquement le SQL qui modifie les données. Il n'y a aucun problème avec la méthode row, mais elle enregistrera les informations contextuelles de l'exécution SQL. L'inconvénient est que le contexte Lorsque les informations sont reproduites à l'autre bout, il est facile de commettre des erreurs en raison des informations plus complexes. La méthode
mixed combine les méthodes de ligne et d'instruction.
Configuration
Dans la pseudo bibliothèque, la configuration suivante est requise :
Le type de configuration par défaut est BlackHole, vous pouvez utiliser
default_table_type = BLACKHOLE
ou
default-storage-engine = BLACKHOLE
pour ouvrir binlog : log-bin = ms-mysql- Bin
Configurez spécialement : log-slave-update = 1. Seulement de cette manière, les opérations dans la bibliothèque principale seront synchronisées avec le binlog de BlackHole. Sinon, seules les opérations ciblant directement BlackHole seront enregistrées dans le binlog. .
Ignorer InnoDB : skip-innodb Lorsque l'instruction de création de table contient engine=innodb, le moteur BlackHole par défaut sera utilisé.
Il convient de rappeler que lorsque cette architecture est adoptée, il existe une couche intermédiaire supplémentaire pour la synchronisation des données et que le problème des délais doit être examiné plus en détail.