Domanda

Perché si salvare qualcosa che non si può recuperare in seguito? Qual è il punto?

È stato utile?

Soluzione

E 'utile in un ambiente replicato in cui tutte le istruzioni SQL vengono eseguiti su tutti i nodi, ma si vuole solo alcuni nodi effettivamente memorizzare il risultato. Si tratta di un caso d'uso riportate nella documentazione: http: //dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html

Altri usi fornite nella documentazione includono:

  • Verifica della sintassi del file dump.
  • Misurazione del sovraccarico dalla registrazione binaria, confrontando le prestazioni utilizzando BLACKHOLE con e senza registrazione binaria abilitata.
  • BLACKHOLE è essenzialmente una “no-op” motore di archiviazione, in modo che possa essere utilizzato per la ricerca di prestazioni i colli di bottiglia non è relativo al motore di archiviazione stesso.

Altri suggerimenti

Supponiamo di avere due computer, ognuno dei quali esegue un server MySQL. Un computer host il database primario, e il secondo di host da computer un replicante schiavo che si utilizza come un di backup.

Inoltre si supponga che il server primario contiene alcuni database o tabelle che non si desidera eseguire il backup. Forse sono tabelle della cache ad alta churn e non importa fa se si perde il loro contenuto. Così, per risparmiare spazio su disco e evitare l'uso inutile di CPU, memoria e disco IO, si utilizza il opzioni di replica per configurare lo slave di ignorare le dichiarazioni che riguardano le tabelle che non si desidera eseguire il backup.

Ma dal momento che i filtri di replica solo vengono applicati sul server slave , tutti istruzioni eseguite sul server master devono ancora le binlogs per essere trasmessi attraverso la rete. C'è essere larghezza di banda sprecata qui; il server master è l'invio di binlogs per le transazioni che lo schiavo è semplicemente andando a buttare via dopo aver ricevuto loro. Possiamo fare meglio, ed evitare il consumo di banda inutile?

Sì, si può, ed è lì che il motore BLACKHOLE viene in. Sul stesso computer in cui il server master è in esecuzione su, corriamo un secondo, processo mysqld fittizio, questo ospita un BLACKHOLE Banca dati. Configuriamo questo processo fittizio per replicare dal binlog del processo principale, con le stesse opzioni di replica come il vero schiavo, e per produrre un binlog propria. binlog del processo manichino ora contiene solo le dichiarazioni che i reali bisogni slave e non ha fatto alcun lavoro effettivo oltre filtrando le dichiarazioni indesiderati dal binlog (poiché sta usando il motore BLACKHOLE). Infine, configuriamo il vero schiavo di replicare da binlog del processo di manichino, piuttosto che dal binlog del processo di master originale. Ora abbiamo eliminato il traffico di rete inutile tra i due computer che ospitano i server master e slave.

Questa configurazione è quello che è stato descritto ed illustrato (molto più tersely) di questo paragrafo e schema di la documentazione blackhole :

Supponiamo che l'applicazione richiede servo-side regole di filtraggio, ma il trasferimento di tutti i dati di registro binari ai primi risultati di schiavi in ??troppo traffico. In tal caso, è possibile impostare sull'host padrone un processo slave “fittizio” la cui impostazione predefinita immagazzinaggio motore è BLACKHOLE, raffigurato come segue:

Diagramma dello scenario sopra descritto

Inoltre filtraggio, i documenti anche cripticamente suggerimento che utilizza un server BLACKHOLE con binlogging abilitato "può essere utile come ripetitore ... meccanismo" . Questo caso d'uso è concretizzati meno nella documentazione, ma è possibile immaginare uno scenario in cui questo avrebbe senso. Per esempio, supponiamo di avere un sacco di server slave, tutti su computer in una rete locale con connessioni locali veloci per l'altro, che tutti hanno bisogno di replicare grandi quantità di dati da uno slave remoto che può essere collegata solo a su internet. Se non si desidera avere tutti replicare direttamente dalla casella di maestro, da allora che stai ricevendo gli stessi dati più volte e con diverse volte più larghezza di banda internet di quanto si deve. Ma supponiamo che si anche non si vuole avere solo uno dei tuoi schiavi esistenti replicare dal master e gli altri replicare fuori quello schiavo, forse perché i vostri schiavi sono in esecuzione su macchine molto meno affidabile rispetto al maestro , o sono in esecuzione alcuni altri processi che potrebbero uccidere la casella mangiando tutta la sua CPU o memoria, e non si vuole rischiare un software o hardware guasto sulla Takin schiava intermediog verso il basso la rete schiava insieme. Cosa fai?

Un possibile compromesso potrebbe essere quella di introdurre una scatola supplementare nella rete schiavo agire come intermediario, ottimizzato per l'affidabilità e le prestazioni piuttosto che per la conservazione. Dategli un piccolo, drive SSD affidabile e nulla eseguire su di esso a parte un processo mysqld replicare dal master a distanza, e lo hanno producono binlogs che gli altri schiavi possono sottoscrivere. E, naturalmente, istituito questo schiavo intermedio di utilizzare il motore BLACKHOLE, in modo che non ha bisogno di spazio di archiviazione.

Sia questo e lo slave filtraggio intermedio descritto in dettaglio nella documentazione sono casi limite; la maggior parte degli utenti di MySQL non potrà mai trovarsi in situazioni in cui si erano trarre vantaggio dall'utilizzo di una di queste strategie, per non parlare abbastanza vantaggio per giustificare fare il lavoro per loro in realtà set up. Ma almeno in teoria, il motore BLACKHOLE può essere utilizzato per creare un nodo intermedio in una rete di replicare schiavi come strategia di banda-conservazione, senza bisogno che il nodo effettivamente memorizzare i dati sul disco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top