Dit is de opdracht pt-table-checksump die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
pt-table-checksum - Controleer de MySQL-replicatie-integriteit.
KORTE INHOUD
Gebruik: pt-table-checksum [OPTIES] [DSN]
pt-table-checksum voert een online replicatieconsistentiecontrole uit door checksum uit te voeren
query's op de master, wat verschillende resultaten oplevert op replica's die inconsistent zijn
met de meester. De optionele DSN specificeert de masterhost. De "EXIT STATUS" van de tool is
niet nul als er verschillen worden gevonden of als er waarschuwingen of fouten optreden.
De volgende opdracht maakt verbinding met de replicatiemaster op localhost, checksum every
tabel en rapporteer de resultaten voor elke gedetecteerde replica:
pt-tabel-controlesom
Deze tool is gericht op het efficiënt vinden van dataverschillen. Als gegevens afwijken,
u kunt het probleem oplossen met pt-table-sync.
RISICO'S
Percona Toolkit is volwassen, bewezen in de echte wereld en goed getest, maar alle databases
tools kunnen een risico vormen voor het systeem en de databaseserver. Voordat u dit hulpmiddel gebruikt,
alstublieft:
· Lees de documentatie van de tool
· Bekijk de bekende "BUGS" van de tool
· Test de tool op een niet-productieserver
· Maak een back-up van uw productieserver en verifieer de back-ups
Zie ook "BEPERKINGEN".
PRODUCTBESCHRIJVING
pt-table-checksum is ontworpen om in bijna alle gevallen standaard het juiste te doen. Wanneer
bij twijfel kunt u "--explain" gebruiken om te zien hoe de tool een tabel controleert. Het volgende is een
overzicht op hoog niveau van hoe de tool werkt.
In tegenstelling tot oudere versies van pt-table-checksum is deze tool gericht op één
doel, en heeft niet veel complexiteit of ondersteunt veel verschillende checksumming
technieken. Het voert checksum-query's uit op slechts één server, en deze stromen door
replicatie om opnieuw uit te voeren op replica's. Als je het oudere gedrag nodig hebt, kun je dit gebruiken
Percona Toolkit versie 1.0.
pt-table-checksum maakt verbinding met de server die u opgeeft, en vindt databases en tabellen die dat doen
overeenkomen met de filters die u opgeeft (indien aanwezig). Het werkt tabel voor tabel, dus dat is niet het geval
grote hoeveelheden geheugen verzamelen of veel werk verzetten voordat u met de controlesom begint. Dit
maakt het bruikbaar op zeer grote servers. We hebben het gebruikt op servers met honderden
duizenden databases en tabellen, en biljoenen rijen. Hoe groot de server ook is
dat wil zeggen dat pt-table-checksum even goed werkt.
Eén reden waarom het op zeer grote tafels kan werken, is dat het elke tafel in stukken verdeelt
rijen, en controleert elk deel met een enkele REPLACE..SELECT-query. Het varieert per stuk
size om de checksum-query's binnen de gewenste tijd uit te voeren. Het doel van chunken
de tabellen, in plaats van elke tabel met één enkele grote query uit te voeren, is om daarvoor te zorgen
checksums zijn niet opdringerig en veroorzaken niet te veel replicatievertraging of belasting op de server.
Daarom is de doeltijd voor elk deel standaard 0.5 seconde.
De tool houdt bij hoe snel de server de queries kan uitvoeren en past hierop aan
de chunks naarmate het meer leert over de prestaties van de server. Het maakt gebruik van een exponentieel
roterend gewogen gemiddelde om de chunkgrootte stabiel te houden, maar toch responsief te blijven als de
de prestaties van de server veranderen tijdens het checksummen om welke reden dan ook. Dit betekent dat het hulpmiddel
zal zichzelf snel beperken als uw server zwaar belast raakt tijdens een verkeerspiek
of bijvoorbeeld een achtergrondtaak.
Chunking wordt bereikt door een techniek die we in andere tools 'knabbelen' noemden
Percona-toolkit. Het is dezelfde techniek die bijvoorbeeld wordt gebruikt voor pt-archiver. De nalatenschap
chunking-algoritmen die in oudere versies van pt-table-checksum werden gebruikt, zijn verwijderd, omdat ze
resulteerde niet in stukjes van voorspelbare grootte en werkte op veel tafels niet goed. Dat allemaal
nodig is om een tabel in stukken te verdelen, is een of andere index (bij voorkeur een primaire
sleutel of unieke index). Als er geen index is en de tabel een voldoende kleine bevat
aantal rijen, zal de tool de tabel in één stuk controleren.
pt-table-checksum heeft vele andere waarborgen om ervoor te zorgen dat het geen enkele blokkeert
werking van de server, inclusief replica's. Om dit te bereiken, detecteert pt-table-checksum
replica's en maakt er automatisch verbinding mee. (Als dit niet lukt, kun je er een hint mee geven
de optie "--recursiemethode".)
De tool monitort voortdurend replica's. Als een replica te ver achterop raakt in
replicatie, pt-table-checksum pauzeert om de achterstand in te halen. Als een replica een
fout, of de replicatie stopt, pt-table-checksum pauzeert en wacht. Bovendien is pt-tabel-
checksum zoekt naar veelvoorkomende oorzaken van problemen, zoals replicatiefilters, en weigert dit te doen
werken, tenzij u dit forceert. Replicatiefilters zijn gevaarlijk, omdat de query's
dat de pt-table-checksum wordt uitgevoerd, kan mogelijk hiermee in conflict komen en replicatie veroorzaken
falen.
pt-table-checksum verifieert dat chunks niet te groot zijn om veilig te checksumen. Het presteert
een EXPLAIN-query op elk deel, en slaat delen over die mogelijk groter zijn dan gewenst
aantal rijen. U kunt de gevoeligheid van deze beveiliging configureren met de
"--chunk-size-limit" optie. Als een tabel in één stuk wordt gecontroleerd, omdat deze
een klein aantal rijen heeft, verifieert pt-table-checksum bovendien dat de tabel
is niet te groot op replica's. Hiermee wordt het volgende scenario vermeden: een tafel is leeg op de
master, maar is erg groot op een replica en wordt gecontroleerd in één grote query, die
veroorzaakt een zeer lange vertraging in de replicatie.
Er zijn nog een aantal andere waarborgen. pt-table-checksum stelt bijvoorbeeld het sessieniveau in
innodb_lock_wait_timeout in op 1 seconde, zodat als er een slotwacht is, dit de
slachtoffer in plaats van ervoor te zorgen dat andere zoekopdrachten een time-out krijgen. Een andere beveiliging controleert de belasting
de databaseserver en pauzeert als de belasting te hoog is. Er is niet één juist antwoord
voor hoe u dit kunt doen, maar standaard zal pt-table-checksum pauzeren als er meer dan 25 zijn
gelijktijdig uitvoeren van queries. U moet waarschijnlijk een redelijke waarde voor uw server instellen
de optie "--max-load".
Checksumming is meestal een taak met een lage prioriteit die plaats moet maken voor ander werk op de server.
Een tool die voortdurend opnieuw moet worden opgestart, is echter moeilijk te gebruiken. Dus pt-tabel-
checksum is zeer goed bestand tegen fouten. Bijvoorbeeld als de databasebeheerder dit nodig heeft
de query's van pt-table-checksum om welke reden dan ook afbreken, dat is geen fatale fout. Gebruikers vaak
voer pt-kill uit om langlopende checksum-query's te beëindigen. Het hulpprogramma probeert een beëindigde query opnieuw
één keer, en als het opnieuw mislukt, gaat het door naar het volgende deel van die tafel. Hetzelfde
Het gedrag is van toepassing als er een time-out voor het vergrendelen is. De tool zal in dat geval een waarschuwing afdrukken
er treedt een fout op, maar slechts één keer per tafel. Als de verbinding met een server mislukt, pt-
table-checksum zal proberen opnieuw verbinding te maken en verder te werken.
Als pt-table-checksum een voorwaarde tegenkomt waardoor deze volledig stopt, is dat eenvoudig
om het te hervatten met de optie "--resume". Het begint vanaf het laatste deel van de laatste
tabel die het heeft verwerkt. Je kunt de tool ook veilig stoppen met CTRL-C. Het zal eindigen
het stuk dat momenteel wordt verwerkt, en sluit vervolgens af. U kunt het zoals gewoonlijk hervatten
daarna.
Nadat pt-table-checksum klaar is met het optellen van alle chunks in een tabel, pauzeert het en
wacht totdat alle gedetecteerde replica's klaar zijn met het uitvoeren van de controlesomquery's. Zodra dat zo is
klaar, controleert het alle replica's om te zien of ze dezelfde gegevens hebben als de master,
en drukt vervolgens een uitvoerregel af met de resultaten. U kunt een voorbeeld van de uitvoer bekijken
verderop in deze documentatie.
De tool drukt voortgangsindicatoren af tijdens tijdrovende handelingen. Het drukt een
voortgangsindicator terwijl elke tabel wordt gechecksumeerd. De voortgang wordt berekend door de
geschatte aantal rijen in de tabel. Er wordt ook een voortgangsrapport afgedrukt wanneer het pauzeert
te wachten tot de replicatie de achterstand heeft ingehaald, en wanneer er wordt gewacht op het controleren van replica's
verschillen met de meester. U kunt de uitvoer minder uitgebreid maken met de optie "--quiet"
optie.
Als u wilt, kunt u de controlesomtabellen handmatig doorzoeken om een rapport te krijgen van welke tabellen
en brokken hebben verschillen met de master. De volgende query rapporteert elke
database en tabel met verschillen, samen met een samenvatting van het aantal chunks en rijen
mogelijk beïnvloed:
SELECT db, tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks
VAN percona.checksums
WAAR (
master_cnt <> deze_cnt
OF master_crc <> deze_crc
OR IS NIETS(master_crc) <> ISSNULL(deze_crc))
GROEPEREN OP db, tbl;
De tabel waarnaar in die query wordt verwezen, is de controlesomtabel, waarin de controlesommen worden opgeslagen.
Elke rij in de tabel bevat de controlesom van één stuk gegevens uit een tabel in de tabel
server.
Versie 2.0 van pt-table-checksum is niet achterwaarts compatibel met de pt-table-sync-versie
1.0. In sommige gevallen is dit geen ernstig probleem. Een kolom 'grenzen' toevoegen aan het
tabel, en deze vervolgens bijwerken met een handmatig gegenereerde WHERE-clausule, kan voldoende zijn om pt-
table-sync versie 1.0 werkt samen met pt-table-checksum versie 2.0. Ervan uitgaande dat een
primaire sleutel met de naam 'id'. U kunt zoiets als het volgende proberen:
ALTER TABLE-controlesommen ADD-grenzen VARCHAR(500);
UPDATE controlesommen
SET grenzen = COALESCE(CONCAT('id BETWEEN ', lagere_grens,
' AND ', bovenste_grens), '1=1');
Beperkingen
Replica's die op rijen gebaseerde replicatie gebruiken
pt-table-checksum vereist statement-gebaseerde replicatie, en wordt ingesteld
"binlog_format=STATEMENT" op de master, maar vanwege een MySQL-beperking doen replica's dat niet
eer deze verandering. Daarom worden controlesommen niet gerepliceerd voorbij replica's die gebruikmaken van
rijgebaseerde replicatie die masters zijn voor verdere replica's.
De tool controleert automatisch het "binlog_format" op alle servers. Zien
"--[no]check-binlog-format" .
(bug 899415 )
Schema- en tabelverschillen
De tool gaat ervan uit dat schema's en tabellen identiek zijn op de master en zo
replica's. Replicatie mislukt als een replica bijvoorbeeld geen schema heeft
die bestaat op de master (en dat schema is gecontroleerd gesommeerd), of als de structuur van a
tabel op een replica is anders dan op de master.
Percona XtraDB TROS
pt-table-checksum werkt met Percona XtraDB Cluster (PXC) 5.5.28-23.7 en nieuwer. De
Het aantal mogelijke Percona XtraDB Cluster-opstellingen is groot, aangezien het ermee kan worden gebruikt
ook reguliere replicatie. Daarom worden alleen de onderstaande instellingen ondersteund
bekend om te werken. Andere opstellingen, zoals cluster tot cluster, worden niet ondersteund en waarschijnlijk ook niet
werken.
Tenzij anders aangegeven, vereisen alle volgende ondersteunde instellingen dat u de 'dsn'-code gebruikt
methode voor "--recursion-method" om clusterknooppunten op te geven. Ook de vertragingscontrole (zie
"REPLICA CHECKS") wordt niet uitgevoerd voor clusterknooppunten.
Enkel cluster
De eenvoudigste PXC-opstelling is één cluster: alle servers zijn clusterknooppunten, en dat is ook zo
zijn geen reguliere replica's. Als alle knooppunten zijn opgegeven in de DSN-tabel (zie
"--recursion-method"), dan kunt u de tool op elk knooppunt en eventuele diffs op elk knooppunt uitvoeren
andere knooppunten zullen worden gedetecteerd.
Alle knooppunten moeten zich in hetzelfde cluster bevinden (dezelfde waarde 'wsrep_cluster_name' hebben), anders
het hulpprogramma wordt afgesloten met een fout. Hoewel het mogelijk is om verschillende clusters te hebben
dezelfde naam heeft, mag dit niet worden gedaan en wordt dit niet ondersteund. Dit geldt voor iedereen
ondersteunde opstellingen.
Eén cluster met replica's
Clusterknooppunten kunnen ook reguliere masters zijn en repliceren naar reguliere replica's. Echter,
de tool kan alleen diffs op een replica detecteren als deze wordt uitgevoerd op het "masterknooppunt" van de replica.
Als de clusterconfiguratie bijvoorbeeld is:
knooppunt1 <-> knooppunt2 <-> knooppunt3
| |
| +-> replica3
+-> replica2
je kunt diffs op replica3 detecteren door de tool op node3 uit te voeren, maar om diffs te detecteren op
replica2 moet u het hulpprogramma opnieuw uitvoeren op knooppunt2. Als u de tool op knooppunt1 uitvoert, zal dit ook gebeuren
detecteer geen diffs op beide replica's.
Momenteel detecteert de tool deze configuratie niet en waarschuwt hij ook niet voor replica's die dat niet kunnen zijn
aangevinkt (bijvoorbeeld replica2 bij uitvoering op knooppunt3).
Replica's in deze opstelling zijn nog steeds onderworpen aan "--[no]check-binlog-format".
Master naar één cluster
Het is mogelijk dat een gewone master naar een cluster repliceert, alsof het cluster dat wel is
één logische slaaf, zoals:
master -> knooppunt1 <-> knooppunt2 <-> knooppunt3
De tool ondersteunt deze configuratie, maar alleen als deze op de master wordt uitgevoerd en als alle knooppunten in de
cluster consistent zijn met de "directe replica" (knooppunt1 in dit voorbeeld) van de
meester. Als bijvoorbeeld alle knooppunten de waarde "foo" hebben voor rij 1, maar de master een waarde heeft
"bar" voor dezelfde rij, zal dit verschil worden gedetecteerd. Of als alleen knooppunt1 dit verschil heeft,
het zal ook worden gedetecteerd. Maar als alleen knooppunt2 of knooppunt3 dit verschil heeft, zal dit niet het geval zijn
gedetecteerd. Daarom wordt deze opstelling gebruikt om te controleren of de master en het cluster als
geheel consistent zijn.
In deze opstelling kan de tool automatisch de "directe replica" (node1) detecteren wanneer deze wordt uitgevoerd
op de master, zodat u de "dsn" -methode niet hoeft te gebruiken voor "--recursion-method"
omdat knooppunt1 het hele cluster zal vertegenwoordigen, en daarom moeten alle andere knooppunten dat ook zijn
daarmee in overeenstemming.
De tool waarschuwt wanneer deze configuratie wordt gedetecteerd om u eraan te herinneren dat deze alleen werkt wanneer deze wordt gebruikt
zoals hierboven beschreven. Deze waarschuwingen hebben geen invloed op de afsluitstatus van de tool; zij zijn
alleen herinneringen om vals-positieve resultaten te helpen voorkomen.
OUTPUT
De tool drukt resultaten in tabelvorm af, één regel per tabel:
TS FOUTEN VERSCHILLEN RIJEN Brokken OVERGESLAGEN TIJDSTABEL
10-20T08:36:50 0 0 200 1 0 0.005 db1.tbl1
10-20T08:36:50 0 0 603 7 0 0.035 db1.tbl2
10-20T08:36:50 0 0 16 1 0 0.003 db2.tbl3
10-20T08:36:50 0 0 600 6 0 0.024 db2.tbl4
Fouten, waarschuwingen en voortgangsrapporten worden afgedrukt volgens de standaardfout. Zie ook "--stil".
De resultaten van elke tabel worden afgedrukt wanneer de tool klaar is met het controleren van de tabel. De
kolommen zijn als volgt:
TS De tijdstempel (zonder het jaar) waarop de tool klaar was met het optellen van de tabel.
FOUTEN
Het aantal fouten en waarschuwingen dat is opgetreden tijdens het controleren van de tabel. Fouten
en waarschuwingen worden afgedrukt met een standaardfout terwijl de tabel bezig is.
VERSCHILLEN
Het aantal chunks dat verschilt van de master op een of meer replica's. Als
"--no-replicate-check" is opgegeven, zal deze kolom altijd nullen bevatten. Als
Als "--replicate-check-only" is opgegeven, worden alleen tabellen met verschillen afgedrukt.
RIJEN
Het aantal geselecteerde en gecontroleerde rijen uit de tabel. Het kan anders zijn
van het aantal rijen in de tabel als u de optie --where gebruikt.
Brokken
Het aantal stukken waarin de tabel is verdeeld.
Overgeslagen
Het aantal chunks dat is overgeslagen vanwege een of meer van deze problemen:
* MySQL gebruikt de --chunk-index niet
* MySQL gebruikt niet de volledige chunk-index (--[no]check-plan)
* De chunkgrootte is groter dan --chunk-size * --chunk-size-limit
* Time-out van vergrendelingswachttijd overschreden (--nieuwe pogingen)
* Checksum-query beëindigd (--nieuwe pogingen)
Vanaf pt-table-checksum 2.2.5 veroorzaken overgeslagen chunks een "EXIT STATUS" die niet nul is.
TIJD
De tijd die is verstreken tijdens het controleren van de tabel.
TAFEL
De database en tabel waarvoor een controlesom is gemaakt.
Als '--replicate-check-only' is opgegeven, zijn er alleen controlesomverschillen voor gedetecteerde replica's
zijn afgedrukt. De uitvoer is anders: één alinea per replica, één controlesomverschil
per regel, en waarden worden gescheiden door spaties:
Verschillen op h=127.0.0.1,P=12346
TABEL CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
db1.tbl1 1 0 1 PRIMAIRE 1 100
db1.tbl1 6 0 1 PRIMAIRE 501 600
Verschillen op h=127.0.0.1,P=12347
TABEL CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY
db1.tbl1 1 0 1 PRIMAIRE 1 100
db2.tbl2 9 5 0 PRIMAIRE 101 200
De eerste regel van een alinea geeft de replica met verschillen aan. In dit voorbeeld
er zijn er twee: h=127.0.0.1,P=12346 en h=127.0.0.1,P=12347. De kolommen zijn als volgt:
TAFEL
De database en tabel die verschillen van de master.
BROK
Het chunknummer van de tabel dat afwijkt van de master.
CNT_DIFF
Het aantal segmentrijen op de replica minus het aantal segmentrijen op de master.
CRC_DIFF
1 als de CRC van het stuk op de replica anders is dan de CRC van het stuk op de
meester, anders 0.
CHUNK_INDEX
De index die wordt gebruikt om de tabel op te delen.
LOWER_BOUNDARY
De indexwaarden die de ondergrens van het segment definiëren.
UPPER_BOUNDARY
De indexwaarden die de bovengrens van het segment definiëren.
EXIT STATUS
pt-table-checksum heeft drie mogelijke afsluitstatussen: nul, 255 en elke andere waarde is a
bitmask met vlaggen voor verschillende problemen.
Een nul-exitstatus geeft aan dat er geen fouten, waarschuwingen of controlesomverschillen zijn, of dat er geen fouten zijn overgeslagen
brokken of tabellen.
Een afsluitstatus 255 duidt op een fatale fout. Met andere woorden: de tool stierf of crashte. De
fout wordt afgedrukt naar "STDERR".
Als de uitgangsstatus niet nul of 255 is, functioneert de waarde hiervan als een bitmasker
vlaggen:
VLAG BIT WAARDE BETEKENIS
================ ========= ========================= =================
FOUT 1 Er is een niet-fatale fout opgetreden
ALREADY_RUNNING 2 --pid-bestand bestaat en de PID is actief
CAUGHT_SIGNAL 4 Gevangen SIGHUP, SIGINT, SIGPIPE of SIGTERM
NO_SLAVES_FOUND 8 Er zijn geen replica's of clusterknooppunten gevonden
TABLE_DIFF 16 Er is ten minste één diff gevonden
SKIP_CHUNK 32 Er is ten minste één deel overgeslagen
SKIP_TABLE 64 Er is ten minste één tafel overgeslagen
Als er een vlag is ingesteld, is de uitgangsstatus niet nul. Gebruik de bitsgewijze "AND"-bewerking om
controleer op een bepaalde vlag. Als "$exit_status & 16" bijvoorbeeld waar is, dan tenminste
er is één verschil gevonden.
Vanaf pt-table-checksum 2.2.5 veroorzaken overgeslagen chunks een exit-status die niet nul is. Een uitgang
status van nul of 32 is gelijk aan een nul-exitstatus met overgeslagen chunks in de vorige
versies van het hulpmiddel.
OPTIES
Dit hulpprogramma accepteert aanvullende opdrachtregelargumenten. Raadpleeg de "SYNOPSIS" en gebruik
informatie voor details.
--vraag-pas
groep: Verbinding
Vraag om een wachtwoord bij verbinding met MySQL.
--[no]check-binlog-formaat
standaard: ja
Controleer of het "binlog_format" op alle servers hetzelfde is.
Zie "Replica's die op rijen gebaseerde replicatie gebruiken" onder "BEPERKINGEN".
--binaire-index
Deze optie wijzigt het gedrag van "--create-replicate-table" zodat de
De bovenste en onderste grenskolommen van de replicatietabel worden gemaakt met de BLOB-gegevens
type. Dit is handig als u problemen ondervindt bij het controleren van tabellen met sleutels
die een binair gegevenstype bevatten of niet-standaard tekensets hebben. Zien
"--repliceren".
--controle-interval
soort: tijd; standaard: 1; groep: Gaspedaal
Slaaptijd tussen controles voor "--max-lag".
--[geen]controleplan
standaard: ja
Controleer de uitvoeringsplannen van query's op veiligheid. Standaard zorgt deze optie ervoor dat pt-table-
controlesom die moet worden uitgevoerd EXPLAIN voordat query's worden uitgevoerd die bedoeld zijn om toegang te krijgen tot een klein bedrag
van gegevens, maar die toegang zouden kunnen krijgen tot veel rijen als MySQL een slecht uitvoeringsplan kiest. Deze
Neem de query's op om de chunkgrenzen te bepalen, en de chunkquery's zelf. Als
het lijkt erop dat MySQL een slecht query-uitvoeringsplan zal gebruiken, de tool zal de
stuk van de tafel.
De tool gebruikt verschillende heuristieken om te bepalen of een uitvoeringsplan slecht is. De
de eerste is of EXPLAIN meldt dat MySQL van plan is de gewenste index te gebruiken om toegang te krijgen
de rijen. Als MySQL een andere index kiest, beschouwt de tool de query als onveilig.
De tool controleert ook hoeveel van de index MySQL rapporteert dat het zal gebruiken voor de
vraag. De EXPLAIN-uitvoer toont dit in de kolom key_len. De tool onthoudt de
grootste key_len gezien, en slaat stukjes over waar MySQL meldt dat het een kleinere zal gebruiken
voorvoegsel van de index. Deze heuristiek kan worden opgevat als het overslaan van brokken met een
slechter uitvoeringsplan dan andere brokken.
De tool drukt een waarschuwing af wanneer een stuk voor het eerst wordt overgeslagen vanwege een slechte uitvoering
plan in elke tafel. Daaropvolgende stukken worden stilletjes overgeslagen, hoewel je de
aantal overgeslagen blokken in de kolom OVERGESLAGEN in de uitvoer van het hulpprogramma.
Deze optie voegt wat instellingswerk toe aan elke tabel en elk blok. Hoewel het werk dat niet is
opdringerig voor MySQL, het resulteert in meer retourvluchten naar de server, die verbruikt
tijd. Door brokken te klein te maken, wordt de overhead relatief groter. Het
Het is daarom aan te raden om de brokken niet te klein te maken, omdat de tool kan duren
een zeer lange tijd om te voltooien als je dat doet.
--[geen]check-replicatie-filters
standaard: ja; groep: Veiligheid
Voer geen controlesom uit als er replicatiefilters zijn ingesteld op replica's. Het gereedschap ziet er uit
voor serveropties die replicatie filteren, zoals binlog_ignore_db en
repliceer_do_db. Als dergelijke filters worden gevonden, wordt het programma afgebroken met een foutmelding.
Als de replica's zijn geconfigureerd met filteropties, moet u oppassen dat u dit niet doet
om alle databases of tabellen die op de master staan en niet op de replica's, te controleren.
Wijzigingen in dergelijke tabellen kunnen normaal gesproken worden overgeslagen op de replica's vanwege de
filteropties, maar de checksum-query's wijzigen de inhoud van de tabel
slaat de controlesommen op, niet de tabellen waarvan u de gegevens controleert. Daarom,
deze query's worden uitgevoerd op de replica en op de tabel of database die u gebruikt
checksumming niet bestaat, zullen de queries ervoor zorgen dat de replicatie mislukt. Voor meer
informatie over replicatieregels, zie
<http://dev.mysql.com/doc/en/replication-rules.html>.
Replicatiefiltering maakt het onmogelijk om er zeker van te zijn dat de controlesomquery's dat niet doen
replicatie onderbreken (of eenvoudigweg niet repliceren). Als je zeker weet dat het oké is om te rennen
de checksum-query's, kunt u deze optie negeren om de controles uit te schakelen. Zie ook
"--repliceer-database".
Zie ook "REPLICACHEQUES".
--check-slaaf-vertraging
type: tekenreeks; groep: Gaspedaal
Pauzeer het checksummen totdat de vertraging van deze replica kleiner is dan "--max-lag". De waarde is een
DSN die eigenschappen overneemt van de masterhost en de verbindingsopties
("--poort", "--gebruiker", enz.). Standaard blijven pt-table-checksum-monitors op alles achter
verbonden replica's, maar deze optie beperkt de vertragingsbewaking tot de opgegeven replica.
Dit is handig als bepaalde replica's opzettelijk achterblijven (met pt-slave-delay voor
voorbeeld), in welk geval u een normale replica kunt opgeven om te controleren.
Zie ook "REPLICACHEQUES".
--[no]check-slave-tabellen
standaard: ja; groep: Veiligheid
Controleert of tabellen over slaven bestaan en alle controlesom "--kolommen" hebben. Tafels
ontbrekende slaves of niet alle checksum "--kolommen" hebben, kan ertoe leiden dat de tool dit doet
replicatie onderbreken wanneer wordt geprobeerd te controleren op verschillen. Schakel deze controle alleen uit als
je bent op de hoogte van de risico's en weet zeker dat alle tabellen over alle slaven bestaan en bestaan
identiek aan de meester.
--chunk-index
type: tekenreeks
Geef de voorkeur aan deze index voor het opdelen van tabellen. Standaard kiest pt-table-checksum het meest
juiste index voor chunking. Met deze optie kunt u de index specificeren die u
de voorkeur geven aan. Als de index niet bestaat, valt pt-table-checksum terug naar de index
standaardgedrag bij het kiezen van een index. pt-table-checksum voegt de index toe aan het
checksum SQL-instructies in een "FORCE INDEX"-clausule. Wees voorzichtig bij het gebruik van deze optie;
een slechte indexkeuze kan tot slechte prestaties leiden. Dit is waarschijnlijk het beste om te gebruiken wanneer
u controleert slechts één enkele tabel en niet een hele server.
--chunk-index-kolommen
typ: int
Gebruik alleen zoveel linkse kolommen van een "--chunk-index". Dit werkt alleen voor
samengestelde indexen, en is handig in gevallen waarin een bug in de MySQL-query-optimizer
(planner) zorgt ervoor dat het een groot aantal rijen scant in plaats van de index te gebruiken om te lokaliseren
begin- en eindpunt precies. Dit probleem doet zich soms voor bij indexen met
veel kolommen, zoals 4 of meer. Als dit gebeurt, kan het hulpprogramma een waarschuwing afdrukken
gerelateerd aan de "--[no]check-plan" optie. De tool instrueren om alleen de eerste te gebruiken
N kolommen van de index is in sommige gevallen een tijdelijke oplossing voor de bug.
--formaat van een blokje
soort: maat; standaard: 1000
Aantal rijen dat moet worden geselecteerd voor elke controlesomquery. Toegestane achtervoegsels zijn k, M, G.
In de meeste gevallen dient u deze optie niet te gebruiken; geef in plaats daarvan de voorkeur aan "--chunk-time".
Deze optie kan het standaardgedrag overschrijven, namelijk het aanpassen van de chunk-grootte
dynamisch om te proberen chunks in exact "--chunk-time" seconden te laten lopen. Wanneer dit
optie wordt niet expliciet ingesteld, de standaardwaarde wordt gebruikt als uitgangspunt, maar daarna
dat, de tool negeert de waarde van deze optie. Als u deze optie expliciet instelt,
dan schakelt het echter het dynamische aanpassingsgedrag uit en probeert het alle chunks te maken
precies het opgegeven aantal rijen.
Er is een subtiliteit: als de chunk-index niet uniek is, dan is het mogelijk dat chunks
zal groter zijn dan gewenst. Als een tabel bijvoorbeeld wordt opgesplitst door een index die
10,000 van een bepaalde waarde bevat, is er geen manier om een WHERE-component te schrijven die overeenkomt
slechts 1,000 van de waarden, en dat stuk zal minstens 10,000 rijen groot zijn. Zo'n
chunk zal waarschijnlijk worden overgeslagen vanwege "--chunk-size-limit".
Als u een kleine chunkgrootte selecteert, wordt het gereedschap gedeeltelijk veel langzamer
vanwege het instelwerk dat nodig is voor "--[no]check-plan".
--limiet voor stukgrootte
type: vlotter; standaard: 2.0; groep: Veiligheid
Controleer de chunks niet zo veel groter dan de gewenste chunkgrootte.
Als een tabel geen unieke indexen heeft, kunnen de blokgroottes onnauwkeurig zijn. Deze optie
specificeert een maximaal toelaatbare limiet voor de onnauwkeurigheid. Het hulpmiddel gebruikt naar
schat hoeveel rijen er in de chunk zitten. Als die schatting het gewenste stuk overschrijdt
grootte maal de limiet (standaard twee keer zo groot), waarna de tool het deel overslaat.
De minimale waarde voor deze optie is 1, wat betekent dat geen enkele chunk groter kan zijn dan
"--formaat van een blokje". U wilt waarschijnlijk niet 1 opgeven, omdat rijen gerapporteerd door
EXPLAIN zijn schattingen, die kunnen verschillen van het werkelijke aantal rijen in de
brok. Als de tool te veel stukken overslaat omdat ze te groot zijn, wil je dat misschien wel
om een waarde op te geven die groter is dan de standaardwaarde van 2.
U kunt de controle op overmaatse chunks uitschakelen door een waarde van 0 op te geven.
--stuk-tijd
soort: vlotter; standaard: 0.5
Pas de chunkgrootte dynamisch aan, zodat het zo lang duurt om elke checksum-query uit te voeren.
De tool houdt de controlesomsnelheid (rijen per seconde) bij voor alle tabellen en elke tabel
individueel. Het gebruikt deze tarieven om de chunkgrootte aan te passen na elke checksum-query,
zodat de volgende controlesomquery deze hoeveelheid tijd (in seconden) nodig heeft om uit te voeren.
Het algoritme is als volgt: aan het begin van elke tabel is de chunkgrootte
geïnitialiseerd op basis van het totale gemiddelde aantal rijen per seconde sinds de tool begon te werken, of
de waarde van "--chunk-size" als de tool nog niet is begonnen te werken. Voor elk
volgende deel van een tabel, past de tool de deelgrootte aan om te proberen query's uit te voeren
in de gewenste tijd uitgevoerd. Het houdt een exponentieel afnemend voortschrijdend gemiddelde bij
aantal zoekopdrachten per seconde, zodat als de prestaties van de server veranderen als gevolg van veranderingen in
serverbelasting, de tool past zich snel aan. Hierdoor kan de tool voorspelbaar presteren
getimede zoekopdrachten voor elke tafel en voor de server in het algemeen.
Als deze optie is ingesteld op nul, wordt de chunkgrootte niet automatisch aangepast, dus controleer de querysom
De tijden zullen variëren, maar de grootte van de controlesom van zoekopdrachten niet. Een andere manier om hetzelfde te doen
is om expliciet een waarde voor "--chunk-size" op te geven, in plaats van deze op de
standaard.
--kolommen
korte vorm: -c; type: array; groep: Filteren
Controleer alleen deze door komma's gescheiden lijst met kolommen. Als een tafel er geen heeft
de opgegeven kolommen wordt overgeslagen.
Deze optie is van toepassing op alle tabellen, dus het heeft eigenlijk alleen zin als u er één controleert
tabel, tenzij de tabellen een gemeenschappelijke reeks kolommen hebben.
--config
type: Array; groep: Config
Lees deze door komma's gescheiden lijst met configuratiebestanden; indien opgegeven, moet dit de eerste zijn
optie op de opdrachtregel.
Zie de uitvoer "--help" voor een lijst met standaardconfiguratiebestanden.
--[no]maak-repliceer-tabel
standaard: ja
Maak de database en tabel "--replicate" als deze niet bestaan. De structuur van
de replicatietabel is dezelfde als de voorgestelde tabel vermeld in "--replicaat".
--databases
korte vorm: -d; soort: hasj; groep: Filteren
Controleer alleen de som van deze door komma's gescheiden lijst met databases.
--databases-regex
type: tekenreeks; groep: filteren
Alleen controlesomdatabases waarvan de namen overeenkomen met deze Perl-regex.
--defaults-bestand
korte vorm: -F; type: tekenreeks; groep: Verbinding
Lees alleen mysql-opties uit het opgegeven bestand. U moet een absolute padnaam opgeven.
--[no]lege-repliceertabel
standaard: ja
Verwijder eerdere controlesommen voor elke tabel voordat u de tabel controleert. Deze optie
kapt niet de hele tabel af, maar verwijdert alleen rijen (controlesommen) voor elke tabel
vlak voordat u de tabel controleert. Daarom, als het checksummen voortijdig stopt en
er al gegevens waren, zullen er nog steeds rijen zijn voor tabellen die dat niet waren
gecontroleerd voordat het gereedschap werd gestopt.
Als u hervat vanaf een eerdere controlesomrun, worden de controlesomrecords voor de
tabel waaruit het hulpprogramma wordt hervat, wordt niet geleegd.
Om de gehele replicatietabel leeg te maken, moet u eerst handmatig "TRUNCATE TABLE" uitvoeren
het uitvoeren van het gereedschap.
--motoren
korte vorm: -e; soort: hasj; groep: Filteren
Alleen controlesomtabellen die deze opslagengines gebruiken.
--leg uit
cumulatief: ja; standaard: 0; groep: Uitgang
Controlesomquery's weergeven, maar niet uitvoeren (schakelt "--[no]lege-replicaattabel uit").
Indien twee keer gespecificeerd, itereert de tool feitelijk het chunking-algoritme,
het afdrukken van de boven- en ondergrenswaarden voor elk deel, maar het niet uitvoeren van de
controlesomvragen.
--float-precisie
typ: int
Precisie voor FLOAT en DOUBLE nummer-naar-string-conversie. Oorzaken FLOAT en DUBBEL
waarden die moeten worden afgerond op het opgegeven aantal cijfers na de komma, met
the RONDE() functie in MySQL. Dit kan helpen voorkomen dat de controlesom niet overeenkomt als gevolg van
verschillende drijvende-kommaweergaven van dezelfde waarden op verschillende MySQL
versies en hardware. De standaardinstelling is geen afronding; de waarden worden omgezet naar
snaren door de CONCAT() functie en MySQL kiest de tekenreeksrepresentatie. als jij
specificeert u bijvoorbeeld een waarde van 2, dan worden de waarden 1.008 en 1.009 afgerond naar
1.01, en controleert de som als gelijk.
--functie
type: tekenreeks
Hash-functie voor controlesommen (FNV1A_64, MURMUR_HASH, SHA1, MD5, CRC32, enz.).
De standaard is om te gebruiken CRC32(), Maar MD5() en SHA1() werken ook, en u kunt uw
eigen functie, zoals een gecompileerde UDF, als u dat wenst. De functie die u opgeeft, wordt uitgevoerd
SQL, niet in Perl, dus het moet beschikbaar zijn voor MySQL.
MySQL heeft geen goede ingebouwde hashfuncties die snel zijn. CRC32() is te gevoelig
tot hash-botsingen, en MD5() en SHA1() zijn zeer CPU-intensief. De FNV1A_64() UDF
dat wordt gedistribueerd met Percona Server is een sneller alternatief. Het is heel eenvoudig om
compileren en installeren; kijk naar de header in de broncode voor instructies. Als het is
geïnstalleerd, heeft dit de voorkeur MD5(). U kunt ook de MURMUR_HASH() functie als
je compileert en installeert dat als een UDF; de bron wordt ook gedistribueerd met Percona
Server, en het is misschien beter dan FNV1A_64().
--help
groep: Hulp
Help weergeven en afsluiten.
--gastheer
korte vorm: -h; type: tekenreeks; standaard: localhost; groep: Verbinding
Host om verbinding mee te maken.
--negeer-kolommen
soort: hasj; groep: Filteren
Negeer deze door komma's gescheiden lijst met kolommen bij het berekenen van de controlesom. Als een tafel
alle kolommen zijn gefilterd door --ignore-columns, wordt deze overgeslagen.
--negeer-databases
soort: hasj; groep: Filteren
Negeer deze door komma's gescheiden lijst met databases.
--negeer-databases-regex
type: tekenreeks; groep: filteren
Negeer databases waarvan de namen overeenkomen met deze Perl-regex.
--negeer-motoren
soort: hasj; standaard: FEDERATED,MRG_MijnISAM; groep: Filteren
Negeer deze door komma's gescheiden lijst met opslagengines.
--negeer-tabellen
soort: hasj; groep: Filteren
Negeer deze door komma's gescheiden lijst met tabellen. Tabelnamen kunnen worden gekwalificeerd met de
database naam. De tabel "--replicaat" wordt altijd automatisch genegeerd.
--ignore-tabellen-regex
type: tekenreeks; groep: filteren
Negeer tabellen waarvan de namen overeenkomen met de Perl-regex.
--max-vertraging
soort: tijd; standaard: 1s; groep: Gaspedaal
Pauzeer de controlesom totdat de vertraging van alle replica's kleiner is dan deze waarde. Na elke
checksum-query (elk deel), pt-table-checksum kijkt naar de replicatievertraging van alles
replica's waarmee het verbinding maakt, met behulp van Seconds_Behind_Master. Als een replica achterblijft
meer is dan de waarde van deze optie, dan zal pt-table-checksum blijven slapen
"--check-interval" seconden en controleer vervolgens alle replica's opnieuw. Als u specificeert
"--check-slave-lag", dan onderzoekt de tool alleen die server op vertraging, niet alle servers.
De tool wacht eeuwig totdat replica's niet meer achterblijven. Als een replica wordt gestopt, wordt het
tool wacht eeuwig totdat de replica is gestart. Het checksummen gaat weer door
replica's draaien en lopen niet te veel achter.
De tool drukt tijdens het wachten voortgangsrapporten af. Als een replica wordt gestopt, drukt deze een
voortgangsrapportage onmiddellijk, daarna opnieuw bij elke voortgangsrapportage-interval.
Zie ook "REPLICACHEQUES".
--max-belasting
type: Array; standaard: Threads_running=25; groep: Gaspedaal
Onderzoek SHOW GLOBAL STATUS na elk stuk en pauzeer als er statusvariabelen zijn
hoger dan de drempel. De optie accepteert een door komma's gescheiden lijst met de MySQL-status
variabelen om te controleren op een drempelwaarde. Een optionele "=MAX_VALUE" (of ":MAX_VALUE") kan dat wel
volg elke variabele. Indien niet opgegeven, bepaalt de tool een drempel door de waarde te onderzoeken
huidige waarde en deze met 20% te verhogen.
Als u bijvoorbeeld wilt dat de tool pauzeert wanneer Threads_connected te hoog wordt, kunt u
kan "Threads_connected" specificeren, en de tool zal de huidige waarde controleren wanneer het
begint te werken en voeg 20% toe aan die waarde. Als de huidige waarde 100 is, dan is de tool
pauzeert wanneer Threads_connected de 120 overschrijdt en hervat het werken wanneer het onder de 120 is
opnieuw. Als u een expliciete drempel wilt opgeven, zoals 110, kunt u beide gebruiken
"Threads_connected:110" of "Threads_connected=110".
Het doel van deze optie is om te voorkomen dat het gereedschap te veel belasting toevoegt aan de
server. Als de checksum-query's opdringerig zijn, of als ze wachten op vergrendeling veroorzaken, dan is er andere
zoekopdrachten op de server hebben de neiging te blokkeren en in de wachtrij te staan. Dit zal doorgaans leiden tot
Threads_running neemt toe en de tool kan dat detecteren door SHOW GLOBAL uit te voeren
STATUS onmiddellijk nadat elke controlesomquery is voltooid. Als u een drempelwaarde opgeeft voor
deze variabele, dan kunt u het hulpprogramma opdracht geven te wachten tot de query's worden uitgevoerd
normaal weer. Dit zal wachtrijen echter niet voorkomen; het geeft alleen de server
een kans om te herstellen van de wachtrij. Als u wachtrijen opmerkt, kunt u deze het beste verminderen
de broktijd.
--wachtwoord
korte vorm: -p; type: tekenreeks; groep: Verbinding
Wachtwoord om te gebruiken bij het verbinden. Als het wachtwoord komma's bevat, moeten deze worden ontsnapt
met een backslash: "exam\,ple"
--pid
type: tekenreeks
Maak het opgegeven PID-bestand aan. De tool start niet als het PID-bestand al bestaat en
de PID die het bevat is anders dan de huidige PID. Als het PID-bestand
bestaat en de PID die deze bevat niet meer actief is, zal de tool de PID overschrijven
bestand met de huidige PID. Het PID-bestand wordt automatisch verwijderd wanneer de tool wordt afgesloten.
--inpluggen
type: tekenreeks
Perl-modulebestand dat een klasse "pt_table_checksum_plugin" definieert. Een plug-in maakt het mogelijk
om een Perl-module te schrijven die in veel delen van pt-table-checksum kan aansluiten. Dit
vereist een goede kennis van de Perl- en Percona Toolkit-conventies, die daarbuiten liggen
dit bereik van deze documentatie. Indien u vragen heeft, kunt u contact opnemen met Percona
hulp nodig.
Zie "PLUGIN" voor meer informatie.
--haven
korte vorm: -P; type: int; groep: Verbinding
Poortnummer dat moet worden gebruikt voor verbinding.
--voortgang
type: reeks; standaard: tijd,30
Druk voortgangsrapporten af naar STDERR.
De waarde is een door komma's gescheiden lijst met twee delen. Het eerste deel kan een percentage zijn,
tijd of iteraties; het tweede deel specificeert hoe vaak een update moet worden afgedrukt,
in percentage, seconden of aantal iteraties. De tool drukt voortgangsrapporten af
een verscheidenheid aan tijdrovende handelingen, waaronder wachten tot replica's de achterstand inhalen
ze raken achterop.
--stil
korte vorm: -q; cumulatief: ja; standaard: 0
Druk alleen de belangrijkste informatie af (schakelt "--progress" uit). Dit specificeren
optie zorgt er eenmaal voor dat het hulpprogramma alleen fouten, waarschuwingen en tabellen afdrukt die dat wel hebben
checksum-verschillen.
Als u deze optie tweemaal opgeeft, drukt het hulpprogramma alleen fouten af. In dit geval jij
kan de afsluitstatus van het hulpprogramma gebruiken om te bepalen of er waarschuwingen of controlesom zijn geweest
verschillen.
--recursie
typ: int
Aantal niveaus dat moet worden herhaald in de hiërarchie bij het detecteren van replica's. Standaard is
oneindig. Zie ook "--recursiemethode" en "REPLICA CHECKS".
--recursie-methode
type: reeks; standaard: proceslijst,hosts
Voorkeursrecursiemethode voor het ontdekken van replica's. pt-table-checksum wordt uitgevoerd
verschillende "REPLICA CHECKS" voor en tijdens het hardlopen.
Hoewel replica's niet vereist zijn om pt-table-checksum uit te voeren, kan het hulpprogramma dit niet detecteren
diffs op slaven die het niet kan ontdekken. Daarom wordt er een waarschuwing afgedrukt en wordt de
"EXIT STATUS" is niet nul als er geen replica's zijn gevonden en de methode niet "geen" is. Als
Als dit gebeurt, probeer dan een andere recursiemethode of gebruik de "dsn"-methode om de
replica's om te controleren.
Mogelijke methoden zijn:
METHODE TOEPASSINGEN
================================================= ======
proceslijst TOON PROCESLIJST
gastheren TOON SLAVE GASTHEREN
cluster STATUS TONEN ZOALS 'wsrep\_incoming\_addresses'
dsn=DSN DSN's uit een tabel
geen Vind geen slaven
De "processlist"-methode is de standaardmethode, omdat "SHOW SLAVE HOSTS" niet betrouwbaar is.
Als de server echter een niet-standaard poort gebruikt (niet 3306), dan is de "hosts"-methode
wordt de standaard omdat dit in dit geval beter werkt.
Voor de "hosts"-methode moeten replica's worden geconfigureerd met "report_host",
"rapport_port", enz.
De "cluster"-methode vereist een cluster gebaseerd op Galera 23.7.3 of nieuwer, zoals
Percona XtraDB Cluster versies 5.5.29 en hoger. Hierdoor worden knooppunten in a automatisch ontdekt
cluster met behulp van "TOON STATUS ALS 'wsrep\_incoming\_addresses'". Je kunt combineren
"cluster" met "processlist" en "hosts" om clusterknooppunten en replica's automatisch te ontdekken,
maar deze functionaliteit is experimenteel.
De "dsn"-methode is speciaal: in plaats van automatisch replica's te ontdekken, wordt dit gedaan
methode specificeert een tabel met replica-DSN's. De tool maakt hier alleen verbinding mee
replica's. Deze methode werkt het beste wanneer replica's niet dezelfde MySQL-gebruikersnaam gebruiken of
wachtwoord als master, of wanneer u wilt voorkomen dat de tool verbinding maakt
bepaalde replica's. De "dsn"-methode wordt als volgt gespecificeerd: "--recursion-method
dsn=h=host,D=percona,t=dsns". De opgegeven DSN moet D- en t-delen bevatten, of alleen een
databasegekwalificeerd t-gedeelte, dat de DSN-tabel specificeert. De DSN-tabel moet de extensie
volgende structuur:
MAAK TABEL `dsns` (
`Id` int(11) NIET NULL AUTO_INCREMENT,
`ouder_id` int(11) STANDAARD NUL,
`dsn` Varchar(255) NIET NUL,
PRIMAIRE SLEUTEL (`id`)
);
DSN's worden gerangschikt op "id", maar "id" en "parent_id" worden anders genegeerd. De "dsn"
kolom bevat een replica-DSN zoals deze op de opdrachtregel zou worden gegeven, bijvoorbeeld:
"h=replica_host,u=repl_user,p=repl_pass".
De "none"-methode zorgt ervoor dat de tool alle slaves en clusterknooppunten negeert. Deze methode is
niet aanbevolen omdat het de "REPLICA CHECKS" effectief uitschakelt en nee
verschillen zijn te vinden. Het is echter handig als u alleen controlesommen hoeft te schrijven
op de master of op een enkel clusterknooppunt. Het veiliger alternatief is
"--no-replicate-check": de tool vindt replica's en clusterknooppunten, voert de
"REPLICA CHECKS", maar controleert niet op verschillen. Zie "--[geen]replicaatcontrole".
--repliceren
type: tekenreeks; standaard: percona.checksums
Schrijf de controlesomresultaten naar deze tabel. De replicatietabel moet deze structuur hebben
(MAGIC_create_repliceren):
CREATE TABLE controlesommen (
db CHAR(64) NIET NUL,
tbl CHAR(64) NIET NUL,
stuk INT NIET NULL,
chunk_time FLOAT NULL,
stuk_index VARCHAR(200) NUL,
onderste_grens TEKST NULL,
bovengrens TEKST NULL,
deze_crc CHAR(40) NIET NUL,
this_cnt INT NIET NULL,
master_crc CHAR(40) NUL,
master_cnt INT NULL,
ts TIMESTAMP NIET NULL STANDAARD CURRENT_TIMESTAMP BIJ UPDATE CURRENT_TIMESTAMP,
PRIMAIRE SLEUTEL (db, tbl, chunk),
INDEX ts_db_tbl (ts, db, tbl)
) MOTOR=InnoDB;
Opmerking: het gegevenstype lower_boundary en upper_boundary kan BLOB zijn. Zie "--binaire-index".
Standaard is "--[no]create-replicate-table" waar, dus de database en de tabel
die door deze optie zijn opgegeven, worden automatisch gemaakt als ze niet bestaan.
Zorg ervoor dat u een geschikte opslagengine voor de replicatietabel kiest. Als je bent
Als u InnoDB-tabellen controleert en u MyISAM voor deze tabel gebruikt, wordt er een impasse doorbroken
replicatie, omdat de combinatie van transactionele en niet-transactionele tabellen in de
checksum-instructies zorgen ervoor dat het naar de binlog wordt geschreven, ook al had het een
fout. Het wordt dan opnieuw afgespeeld zonder een impasse op de replica's en verbreekt de replicatie
met "verschillende fouten op master en slave." Dit is geen probleem met pt-table-
controlesom; het is een probleem met MySQL-replicatie, en je kunt er meer over lezen in de
MySQL-handleiding.
De gerepliceerde tabel wordt nooit gecontroleerd (de tool voegt deze tabel automatisch toe aan de tabel).
"--negeer-tabellen").
--[geen]replicaatcontrole
standaard: ja
Controleer replica's op gegevensverschillen nadat u elke tabel hebt voltooid. Het hulpmiddel vindt
verschillen door een eenvoudige SELECT-instructie uit te voeren op alle gedetecteerde replica's. De
query vergelijkt de controlesomresultaten van de replica met de controlesomresultaten van de master. Het
rapporteert verschillen in de DIFFS-kolom van de uitvoer.
--alleen replicatiecontrole
Controleer replica's op consistentie zonder controlesomquery's uit te voeren. Deze optie is
alleen gebruikt met "--[no]replicate-check". Indien gespecificeerd, doet pt-table-checksum dat niet
controlesom van alle tabellen. Het controleert replica's op verschillen gevonden door eerdere
checksumming en wordt vervolgens afgesloten. Het kan handig zijn als u pt-table-checksum rustig uitvoert
in een cronjob bijvoorbeeld, en later een rapport willen over de resultaten van de cronjob,
misschien om een Nagios-check uit te voeren.
--repliceer-controle-nieuwe pogingen
typ: int; standaard: 1
Probeer de controlesomvergelijking zo vaak opnieuw als er een verschil wordt aangetroffen. Alleen wanneer
Als het verschil na dit aantal controles blijft bestaan, wordt het als geldig beschouwd. Dit gebruiken
optie met een waarde van 2 of meer verlicht valse verschillen die ontstaan bij het gebruik
de optie --resume.
--repliceer-database
type: tekenreeks
GEBRUIK alleen deze database. Standaard voert pt-table-checksum USE uit om het
database die de tabel bevat waaraan het momenteel werkt. Dit is een beste poging
om problemen met replicatiefilters zoals binlog_ignore_db en
repliceer_negeer_db. Replicatiefilters kunnen echter een situatie creëren waarin er
Er is simpelweg niet één juiste manier om dingen te doen. Sommige uitspraken worden mogelijk niet gerepliceerd, en
andere kunnen ervoor zorgen dat de replicatie mislukt. In dergelijke gevallen kunt u deze optie gebruiken
specificeer een standaarddatabase die pt-table-checksum selecteert met USE en nooit verandert.
Zie ook "--[no]check-replication-filters".
--hervat
Hervat de controlesom vanaf het laatst voltooide deel (wordt uitgeschakeld
"--[no]lege-replicaattabel"). Als het hulpprogramma stopt voordat alle tabellen zijn gecontroleerd,
deze optie zorgt ervoor dat de checksumming wordt hervat vanaf het laatste deel van de laatste tabel
geëindigd.
--pogingen
typ: int; standaard: 2
Probeer een chunk zo vaak opnieuw als er een niet-fatale fout optreedt. Niet-fatale fouten zijn dat wel
problemen zoals een time-out voor het wachten op de vergrendeling of het beëindigen van de query.
--looptijd
typ: tijd
Hoe lang rennen. Standaard wordt uitgevoerd totdat alle tabellen zijn gecontroleerd. Deze
achtervoegsels voor tijdswaarden zijn toegestaan: s (seconden), m (minuten), h (uren) en d (dagen).
Combineer deze optie met "--resume" om zoveel mogelijk tabellen binnen een toegewezen tabel op te tellen
de volgende keer dat het hulpprogramma wordt uitgevoerd, gaat het verder waar het hulpprogramma was gebleven.
--scheidingsteken
type: tekenreeks; standaard: #
Het scheidingsteken dat wordt gebruikt voor CONCAT_WS(). Dit karakter wordt gebruikt om lid te worden van de
waarden van kolommen bij het controleren van de som.
--set-vars
type: Array; groep: Verbinding
Stel de MySQL-variabelen in deze door komma's gescheiden lijst van "variabele=waarde"-paren in.
Standaard stelt de tool het volgende in:
wait_timeout=10000
innodb_lock_wait_timeout=1
Variabelen die op de opdrachtregel zijn opgegeven, overschrijven deze standaardwaarden. Bijvoorbeeld,
het specificeren van "--set-vars wait_timeout=500" overschrijft de standaardwaarde van 10000.
De tool drukt een waarschuwing af en gaat verder als een variabele niet kan worden ingesteld.
--stopcontact
korte vorm: -S; type: tekenreeks; groep: Verbinding
Socketbestand om te gebruiken voor verbinding.
--tafels
korte vorm: -t; soort: hasj; groep: Filteren
Controleer alleen deze door komma's gescheiden lijst met tabellen. Tabelnamen kunnen worden gekwalificeerd met
de databasenaam.
--tabellen-regex
type: tekenreeks; groep: filteren
Alleen controlesomtabellen waarvan de namen overeenkomen met deze Perl-regex.
--trimmen
Toevoegen TRIM () naar VARCHAR-kolommen (helpt bij het vergelijken van 4.1 met >= 5.0). Dit is nuttig
als je je niet bekommert om de verschillen in de volgruimte tussen MySQL-versies
variëren in hun omgang met volgspaties. MySQL 5.0 en hoger behouden allemaal de trailing
spaties in VARCHAR, terwijl eerdere versies deze zouden verwijderen. Deze verschillen zullen
valse controlesomverschillen veroorzaken.
--gebruiker
korte vorm: -u; type: tekenreeks; groep: Verbinding
Gebruiker om in te loggen indien niet huidige gebruiker.
--versie
groep: Hulp
Toon versie en sluit af.
--[no]versiecontrole
standaard: ja
Controleer op de nieuwste versie van Percona Toolkit, MySQL en andere programma's.
Dit is een standaard "controleer automatisch op updates", met twee extra
Kenmerken. Eerst controleert de tool de versie van andere programma's op het lokale systeem in
aanvulling op een eigen versie. Het controleert bijvoorbeeld de versie van elke MySQL-server
het maakt verbinding met Perl en de Perl-module DBD::mysql. Ten tweede, het controleert en waarschuwt
over versies met bekende problemen. MySQL 5.5.25 had bijvoorbeeld een kritieke bug en
werd opnieuw uitgebracht als 5.5.25a.
Alle updates of bekende problemen worden naar STDOUT afgedrukt voordat de normale uitvoer van het hulpprogramma wordt uitgevoerd.
Deze functie mag nooit interfereren met de normale werking van het gereedschap.
Voor meer informatie bezoek .
--waar
type: tekenreeks
Voer alleen rijen uit die overeenkomen met deze WHERE-clausule. U kunt deze optie gebruiken om de
controlesom naar slechts een deel van de tabel. Dit is vooral handig als u bijlagen heeft
alleen tabellen en wil niet voortdurend alle rijen opnieuw controleren; je zou een dagelijkse baan kunnen uitvoeren
om bijvoorbeeld de rijen van gisteren te controleren.
Deze optie lijkt veel op de optie -w voor mysqldump. Geef niet het WAAR op
trefwoord. Mogelijk moet u de waarde vermelden. Hier is een voorbeeld:
pt-table-checksum --waar "ts > CURRENT_DATE - INTERVAL 1 DAG"
REPLICA CONTROLES
Standaard probeert pt-table-checksum alle replica's te vinden en er verbinding mee te maken
de meestergastheer. Dit geautomatiseerde proces wordt "slave-recursie" genoemd en wordt gecontroleerd door
de opties "--recursie-methode" en "--recurse". De tool voert deze controles op iedereen uit
replica's:
1. "--[geen]check-replicatie-filters"
pt-table-checksum controleert op replicatiefilters op alle replica's omdat dat mogelijk is
het controlesomproces compliceren of breken. Standaard wordt het hulpprogramma afgesloten, indien aanwezig
Er worden replicatiefilters gevonden, maar deze controle kan worden uitgeschakeld door dit op te geven
"--geen-controle-replicatie-filters".
2. Tabel "--repliceren".
pt-table-checksum controleert of de tabel "--replicate" bestaat op alle replica's, anders
checksumming kan de replicatie verbreken wanneer updates van de tabel op de master worden gerepliceerd
naar een replica die de tafel niet heeft. Deze controle kan niet worden uitgeschakeld en de tool
wacht eeuwig totdat de tabel op alle replica's bestaat, waarbij "--progress"-berichten worden afgedrukt
terwijl het wacht.
3. Grootte van één stuk
Als een tabel in één enkel blok op de master kan worden gechecksum, zal pt-table-checksum dat ook doen
controleer of de tabelgrootte op alle replica's kleiner is dan "--chunk-size" *
"--chunk-groottelimiet". Dit voorkomt een zeldzaam probleem waarbij de tafel op de master staat
leeg of klein, maar op een replica is hij veel groter. In dit geval het enkele stuk
controlesom op de master zou de replica overbelasten.
Een ander zeldzaam probleem doet zich voor wanneer de tabelgrootte op een replica dichtbij is
"--chunk-grootte" * "--chunk-groottelimiet". In dergelijke gevallen is de kans groter dat de tabel dat is
overgeslagen, ook al is het veilig om de controlesom in één stuk te controleren. Dit gebeurt omdat
tafelafmetingen zijn schattingen. Wanneer deze schattingen en "--chunk-size" *
"--chunk-size-limit" bijna gelijk zijn, wordt deze controle gevoeliger voor de
de foutmarge van schattingen in plaats van daadwerkelijke significante verschillen in tabelgroottes.
Door een grotere waarde op te geven voor "--chunk-size-limit" kunt u dit probleem voorkomen.
Deze controle kan niet worden uitgeschakeld.
4. Vertraging
Na elk deel controleert pt-table-checksum de vertraging op alle replica's, of alleen de
replica gespecificeerd door "--check-slave-lag". Hierdoor wordt de tool niet overbelast
replica's met checksumgegevens. Er is geen manier om deze controle uit te schakelen, maar u kunt dit wel doen
specificeer een enkele replica om te controleren met "--check-slave-lag", en of die replica de
snelste, het zal helpen voorkomen dat de tool te lang wacht totdat de replicavertraging is afgenomen.
5. Controlesom-brokken
Wanneer pt-table-checksum klaar is met het optellen van een tabel, wacht het op de laatste controlesom
chunk om naar alle replica's te repliceren, zodat het de "--[no]replicate-check" kan uitvoeren.
Als u deze optie uitschakelt door --no-replicate-check op te geven, wordt deze controle uitgeschakeld, maar it
schakelt ook de onmiddellijke rapportage van controlesomverschillen uit, waardoor een seconde nodig is
voer de tool uit met "--replicate-check-only" om controlesomverschillen te vinden en af te drukken.
INPLUGGEN
Het bestand gespecificeerd door "--plugin" moet een aangeroepen klasse (dwz een pakket) definiëren
"pt_table_checksum_plugin" met een "new()" subroutine. De tool maakt een exemplaar van
deze klasse en roep alle hooks aan die deze definieert. Er zijn geen hooks vereist, maar een plug-in is dat niet
erg handig zonder hen.
Deze hooks, in deze volgorde, worden aangeroepen indien gedefinieerd:
init
voor_repliceren_check
after_replicate_check
get_slave_lag
voor_checksum_table
after_checksum_table
Elke hook krijgt verschillende argumenten. Om te zien welke argumenten aan een haak worden doorgegeven,
zoek naar de naam van de hook in de broncode van de tool, zoals:
# --plug-in haak
if ($plugin && $plugin->can('init') ) {
$plugin->init(
slaven => $slaven,
slave_lag_cxns => $slave_lag_cxns,
repl_table => $repl_tabel,
);
}
De opmerking "# --plugin hook" gaat vooraf aan elke hook-aanroep.
Neem contact op met Percona als u vragen heeft of hulp nodig heeft.
DSN OPTIES
Deze DSN-opties worden gebruikt om een DSN te maken. Elke optie wordt gegeven als "option=value".
De opties zijn hoofdlettergevoelig, dus P en p zijn niet dezelfde optie. Er kan niet zijn
witruimte voor of na de "=" en als de waarde witruimte bevat, moet deze tussen aanhalingstekens worden geplaatst.
DSN-opties zijn door komma's gescheiden. Zie de percona-toolkit manpage voor volledige details.
· EEN
dsn: tekenset; kopie: ja
Standaard tekenset.
· NS
kopie: nee
DSN-tabeldatabase.
F
dsn: mysql_read_default_file; kopie: ja
Standaardbestand voor verbindingswaarden.
· H
dsn: host; kopie: ja
Maak verbinding met host.
· P
dsn: wachtwoord; kopie: ja
Wachtwoord om te gebruiken bij het verbinden. Als het wachtwoord komma's bevat, moeten deze worden ontsnapt
met een backslash: "exam\,ple"
· Blz
dsn: poort; kopie: ja
Poortnummer dat moet worden gebruikt voor verbinding.
· S
dsn: mysql_socket; kopie: nee
Socketbestand om te gebruiken voor verbinding.
· T
kopie: nee
DSN-tabel tabel.
· u
dsn: gebruiker; kopie: ja
Gebruiker om in te loggen indien niet huidige gebruiker.
MILIEU
De omgevingsvariabele "PTDEBUG" maakt uitgebreide foutopsporingsuitvoer naar STDERR mogelijk. In staat te stellen
debuggen en alle uitvoer vastleggen in een bestand, voer de tool uit als:
PTDEBUG=1 pt-tabel-controlesom ... > BESTAND 2>&1
Wees voorzichtig: het debuggen van uitvoer is omvangrijk en kan enkele megabytes aan uitvoer genereren.
SYSTEM VEREISTEN
U hebt Perl, DBI, DBD::mysql en enkele kernpakketten nodig die in elk
redelijk nieuwe versie van Perl.
Gebruik pt-table-checksump online met behulp van onworks.net-services