pt-online-schema-changep - Online in de cloud

Dit is de opdracht pt-online-schema-changep 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-online-schema-change - ALTER-tabellen zonder ze te vergrendelen.

KORTE INHOUD


Gebruik: pt-online-schema-verandering [OPTIES] DSN

pt-online-schema-change verandert de structuur van een tabel zonder lees- of schrijfbewerkingen te blokkeren.
Specificeer de database en tabel in de DSN. Gebruik dit hulpmiddel niet voordat u het gelezen heeft
documentatie en het zorgvuldig controleren van uw back-ups.

Voeg een kolom toe aan sakila.actor:

pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=actor

Wijzig sakila.actor in InnoDB, waardoor OPTIMIZE TABLE effectief wordt uitgevoerd zonder blokkering
fashion omdat het al een InnoDB-tabel is:

pt-online-schema-change --alter "ENGINE=InnoDB" D=sakila,t=actor

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

PRODUCTBESCHRIJVING


pt-online-schema-change emuleert de manier waarop MySQL tabellen intern verandert, maar het werkt
op een kopie van de tafel die u wilt wijzigen. Dit betekent dat de originele tafel dat niet is
vergrendeld en clients kunnen gegevens erin blijven lezen en wijzigen.

pt-online-schema-change werkt door een lege kopie van de tabel te maken om te wijzigen, aan te passen
naar wens en vervolgens rijen van de oorspronkelijke tabel naar de nieuwe tabel kopiëren. Wanneer de
kopie is voltooid, wordt de originele tabel verwijderd en vervangen door de nieuwe. Door
default, het laat ook de originele tabel vallen.

Het gegevenskopieerproces wordt uitgevoerd in kleine stukjes gegevens, die variëren om te proberen
laat ze uitvoeren in een bepaalde tijd (zie "--chunk-time"). Dit proces is heel
vergelijkbaar met hoe andere tools, zoals pt-table-checksum, werken. Eventuele wijzigingen in gegevens in
de originele tabellen tijdens het kopiëren worden weerspiegeld in de nieuwe tabel, omdat de tool
creëert triggers op de oorspronkelijke tabel om de overeenkomstige rijen in de nieuwe tabel bij te werken.
Het gebruik van triggers betekent dat de tool niet werkt als er al triggers zijn gedefinieerd
op de tafel.

Wanneer de tool klaar is met het kopiëren van gegevens naar de nieuwe tabel, gebruikt het een atomaire "RENAME TABLE"
bewerking om tegelijkertijd de originele en nieuwe tabellen te hernoemen. Nadat dit is voltooid,
de tool laat de originele tabel vallen.

Vreemde sleutels bemoeilijken de werking van de tool en brengen extra risico's met zich mee. De techniek
het atomisch hernoemen van de originele en nieuwe tabellen werkt niet wanneer refererende sleutels verwijzen
Naar de tafel. De tool moet refererende sleutels bijwerken om te verwijzen naar de nieuwe tabel na het schema
verandering is voltooid. De tool ondersteunt twee methoden om dit te bereiken. Jij kunt lezen
meer hierover in de documentatie voor "--alter-foreign-keys-method".

Vreemde sleutels veroorzaken ook enkele bijwerkingen. De finaletafel heeft dezelfde vreemde sleutels
en indexeert als de oorspronkelijke tabel (tenzij u anders specificeert in uw ALTER
statement), maar de namen van de objecten kunnen enigszins worden gewijzigd om de objectnaam te vermijden
botsingen in MySQL en InnoDB.

Om veiligheidsredenen wijzigt de tool de tabel niet tenzij u de optie "--execute" specificeert,
die standaard niet is ingeschakeld. De tool ondersteunt een groot aantal andere maatregelen om te voorkomen
ongewenste belasting of andere problemen, waaronder het automatisch detecteren van replica's, verbinding maken met
ze, en met behulp van de volgende veiligheidscontroles:

· In de meeste gevallen zal het gereedschap weigeren te werken tenzij er een PRIMAIRE SLEUTEL of UNIEKE INDEX is
aanwezig in de tabel. Zie "--alter" voor details.

· Het hulpprogramma weigert te werken als het replicatiefilters detecteert. Zien
"--[no]check-replication-filters" voor details.

· De tool onderbreekt het kopiëren van gegevens als het replica's waarneemt die vertraagd zijn
bij replicatie. Zie "--max-lag" voor details.

· De tool pauzeert of breekt de werking af als het te veel belasting op de server detecteert. Zien
"--max-load" en "--critical-load" voor details.

· De tool stelt "innodb_lock_wait_timeout=1" in en (voor MySQL 5.5 en nieuwer)
"lock_wait_timeout=60" zodat de kans groter is dat hij het slachtoffer wordt van een slot
strijd, en minder kans om andere transacties te verstoren. Deze waarden kunnen zijn
gewijzigd door "--set-vars" op te geven.

· De tool weigert de tabel te wijzigen als refererende sleutelbeperkingen ernaar verwijzen, tenzij
u specificeert "--alter-foreign-keys-methode".

· De tool kan MyISAM-tabellen op "Percona XtraDB Cluster"-knooppunten niet wijzigen.

Percona XtraDB TROS


pt-online-schema-change werkt met Percona XtraDB Cluster (PXC) 5.5.28-23.7 en nieuwer, maar
er zijn twee beperkingen: alleen InnoDB-tabellen kunnen worden gewijzigd en "wsrep_OSU_method" moet
worden ingesteld op "TOI" (totale orderisolatie). De tool sluit af met een fout als de host een
clusterknooppunt en de tabel is MyISAM of wordt geconverteerd naar MyISAM ("ENGINE=MyISAM"), of
als "wsrep_OSU_method" niet "TOI" is. Er is geen manier om deze controles uit te schakelen.

OUTPUT


De tool drukt informatie over zijn activiteiten af ​​naar STDOUT, zodat u kunt zien wat het is
aan het doen. Tijdens de fase van het kopiëren van gegevens drukt het "--progress"-rapporten af ​​naar STDERR. Je kan krijgen
aanvullende informatie door "--print" op te geven.

Als "--statistics" is gespecificeerd, wordt een rapport van verschillende interne gebeurtenistellingen afgedrukt
het einde, zoals:

# Aantal evenementen
# ====== =====
# VOEG 1 IN

OPTIES


"--dry-run" en "--execute" sluiten elkaar wederzijds uit.

Dit hulpprogramma accepteert aanvullende opdrachtregelargumenten. Raadpleeg de "SYNOPSIS" en gebruik
informatie voor details.

--wijzigen
type: tekenreeks

De schemawijziging, zonder de trefwoorden ALTER TABLE. Je kunt er meerdere uitvoeren
wijzigingen aan de tabel door ze met komma's op te geven. Raadpleeg de MySQL
handleiding voor de syntaxis van ALTER TABLE.

De volgende beperkingen zijn van toepassing die, indien geprobeerd, ervoor zorgen dat het hulpprogramma niet werkt
onvoorspelbare manieren:

· In vrijwel alle gevallen dient een PRIMAIRE SLEUTEL of UNIEKE INDEX aanwezig te zijn in de
tafel. Dit is nodig omdat de tool een DELETE-trigger maakt om het
nieuwe tabel bijgewerkt terwijl het proces loopt.

Een opmerkelijke uitzondering is wanneer een PRIMARY KEY of UNIQUE INDEX wordt gemaakt van
bestaand kolommen als onderdeel van de ALTER-clausule; in dat geval zal het deze gebruiken
kolom(men) voor de DELETE-trigger.

· De "RENAME"-clausule kan niet worden gebruikt om de tabel een andere naam te geven.

· Kolommen kunnen niet worden hernoemd door ze te verwijderen en opnieuw toe te voegen met de nieuwe naam. Het gereedschap
kopieert de gegevens van de oorspronkelijke kolom niet naar de nieuwe kolom.

· Als u een kolom zonder standaardwaarde toevoegt en deze NIET NULL maakt, zal de tool dat doen
mislukken, omdat het niet zal proberen een standaardwaarde voor u te raden; U moet de
standaard.

· "DROP BUITENLANDSE SLEUTEL constraint_name" vereist eerder het specificeren van "_constraint_name"
dan de echte "constraint_name". Vanwege een beperking in MySQL is pt-online-schema-
change voegt een leidend onderstrepingsteken toe aan de namen van externe sleutelbeperkingen bij het maken van de
nieuwe tafel. Om deze beperking bijvoorbeeld te laten vallen:

BEPERKING `fk_foo` BUITENLANDSE SLEUTEL (`foo_id`) REFERENTIES `bar` (`foo_id`)

U moet "--alter "DROP BUITENLANDSE SLEUTEL _fk_foo"" specificeren.

· De tool maakt geen gebruik van "LOCK IN SHARE MODE" met MySQL 5.0 omdat dit een
slave-fout die replicatie verbreekt:

Query veroorzaakte verschillende fouten op master en slave. Fout op meester:
'Deadlock gevonden bij het proberen te vergrendelen; probeer de transactie opnieuw te starten' (1213),
Fout op slave: 'geen fout' (0). Standaarddatabase: 'pt_osc'.
Query: 'INSERT INTO pt_osc.t (id, c) WAARDEN ('730', 'nieuwe rij')'

De fout treedt op bij het converteren van een MyISAM-tabel naar InnoDB omdat MyISAM niet-
transactioneel maar InnoDB is transactioneel. MySQL 5.1 en nieuwer behandelen deze zaak
correct, maar testen reproduceert de fout 5% van de tijd met MySQL 5.0.

Dit is een MySQL-bug, vergelijkbaar methttp://bugs.mysql.com/bug.php?id=45694>, maar
er is geen oplossing of oplossing in MySQL 5.0. Zonder "LOCK IN SHARE MODE", tests
pass 100% van de tijd, dus het risico van gegevensverlies of brekende replicatie zou moeten zijn
te verwaarlozen.

Be zeker naar controleren the nieuwe tafel if gebruik MySQL 5.0 en het omzetten van vanaf MyISAM naar
InnoDB!

--alter-foreign-keys-methode
type: tekenreeks

Externe sleutels wijzigen zodat ze naar de nieuwe tabel verwijzen. Vreemde sleutels dat
referentie de te wijzigen tabel moet speciaal worden behandeld om ervoor te zorgen dat ze
blijf verwijzen naar de juiste tabel. Wanneer de tool de oorspronkelijke tabel hernoemt naar
laat de nieuwe zijn plaats innemen, de externe sleutels "volgen" de hernoemde tabel, en dat moet ook
worden gewijzigd om in plaats daarvan naar de nieuwe tabel te verwijzen.

De tool ondersteunt twee technieken om dit te bereiken. Het vindt automatisch "kind
tabellen" die verwijzen naar de tabel die moet worden gewijzigd.

auto
Bepaal automatisch welke methode het beste is. De tool gebruikt "rebuild_constraints"
indien mogelijk (zie de beschrijving van die methode voor details), en zo niet, dan wel
gebruikt "drop_swap".

herbouw_beperkingen
Deze methode gebruikt "ALTER TABLE" om externe sleutelbeperkingen te verwijderen en opnieuw toe te voegen
verwijzen naar de nieuwe tabel. Dit is de geprefereerde techniek, tenzij een of meer van
de "child"-tabellen zijn zo groot dat de "ALTER" te lang zou duren. Het gereedschap
bepaalt dat door het aantal rijen in de onderliggende tabel te vergelijken met het tarief op
waarmee de tool rijen van de oude tabel naar de nieuwe tabel kan kopiëren. Als de
tool schat dat de onderliggende tabel in minder tijd kan worden gewijzigd dan de
"--chunk-time", dan zal het deze techniek gebruiken. Voor het schatten van de
tijd die nodig is om de onderliggende tabel te wijzigen, vermenigvuldigt de tool de rij-kopieersnelheid
door "--chunk-size-limit", omdat de "ALTER TABLE" van MySQL doorgaans veel sneller is
dan het externe proces van het kopiëren van rijen.

Vanwege een beperking in MySQL hebben externe sleutels niet dezelfde naam na de
WIJZIG wat ze ervoor deden. De tool moet de externe sleutel hernoemen wanneer deze
herdefinieert het, wat een leidend onderstrepingsteken aan de naam toevoegt. In sommige gevallen MySQL
hernoemt ook automatisch indexen die nodig zijn voor de externe sleutel.

drop_swap
Schakel externe sleutelcontroles uit (FOREIGN_KEY_CHECKS=0) en laat de oorspronkelijke tabel vallen
voordat u de nieuwe tabel op zijn plaats hernoemt. Dit is anders dan normaal
methode om de oude en nieuwe tabel om te wisselen, die een atomaire "RENAME" gebruikt
niet detecteerbaar voor clienttoepassingen.

Deze methode is sneller en blokkeert niet, maar is om twee redenen riskanter.
Ten eerste, gedurende een korte tijd tussen het laten vallen van de originele tabel en het hernoemen van de
tijdelijke tabel, de te wijzigen tabel bestaat gewoon niet, en query's
ertegen resulteert in een fout. Ten tweede, als er een fout is en de nieuwe
table niet kan worden hernoemd naar de plaats van de oude, dan is het te laat om dat te doen
afbreken, want de oude tabel is definitief verdwenen.

Deze methode forceert "--no-swap-tables" en "--no-drop-old-table".

geen
Deze methode is als "drop_swap" zonder de "swap". Alle externe sleutels die
verwezen naar de oorspronkelijke tabel verwijst nu naar een niet-bestaande tabel. Dit zal
veroorzaken doorgaans schendingen van externe sleutels die zichtbaar zijn in "SHOW ENGINE INNODB
STATUS", vergelijkbaar met het volgende:

Proberen toe te voegen aan index `idx_fk_staff_id` tuple:
DATA TUPLE: 2 velden;
0: lens 1; hex 05; oplopend ;;
1: lens 4; hex 80000001; oplopend ;;
Maar de bovenliggende tabel `sakila`.`staff_old`
of het .ibd-bestand bestaat momenteel niet!

Dit komt omdat de oorspronkelijke tabel (in dit geval sakila.staff) is hernoemd naar
sakila.staff_old en vervolgens laten vallen. Deze methode om externe sleutelbeperkingen af ​​te handelen
wordt verstrekt zodat de databasebeheerder de ingebouwde tool kan uitschakelen
functionaliteit indien gewenst.

--[geen]analyseren-vóór-verwisselen
standaard: ja

Voer ANALYZE TABLE uit op de nieuwe tabel voordat u deze verwisselt met de oude. Standaard,
dit gebeurt alleen wanneer MySQL 5.6 en nieuwer wordt uitgevoerd, en "innodb_stats_persistent" is
ingeschakeld. Geef expliciet de optie op om deze ongeacht MySQL in of uit te schakelen
versie en "innodb_stats_persistent".

Dit omzeilt een mogelijk ernstig probleem met betrekking tot InnoDB-optimalisatiestatistieken.
Als de tafel die wordt gewaarschuwd bezet is en de tool snel voltooit, zal de nieuwe tafel dat doen
geen optimalisatiestatistieken hebben nadat ze zijn verwisseld. Dit kan snel indexgebruik veroorzaken
query's om volledige tabelscans uit te voeren totdat de optimalisatiestatistieken zijn bijgewerkt (meestal na
10 seconden). Als de tafel groot is en de server erg druk, kan dit een storing veroorzaken.

--vraag-pas
Vraag om een ​​wachtwoord bij verbinding met MySQL.

--tekenset
korte vorm: -A; type: tekenreeks

Standaard tekenset. Als de waarde utf8 is, stelt u Perl's binmode op STDOUT in op utf8,
geeft de optie mysql_enable_utf8 door aan DBD::mysql en voert daarna SET NAMES UTF8 uit
verbinding maken met MySQL. Elke andere waarde stelt binmode in op STDOUT zonder de utf8-laag,
en voert SET NAMES uit na verbinding met MySQL.

--[geen]check-alter
standaard: ja

Parseert de opgegeven "--alter" en probeert te waarschuwen voor mogelijk onbedoeld gedrag.
Momenteel controleert het op:

Kolom hernoemt
In eerdere versies van de tool hernoemde een kolom met "CHANGE COLUMN name
new_name" zou ertoe leiden dat de gegevens van die kolom verloren gaan. De tool analyseert nu de
alter statement en probeert deze gevallen op te vangen, dus de hernoemde kolommen zouden dat moeten hebben
dezelfde gegevens als de originelen. De code die dit doet is echter niet volledig
opgeblazen SQL-parser, dus u moet de tool eerst uitvoeren met "--dry-run" en "--print"
en controleer of het de hernoemde kolommen correct detecteert.

LAAT DE PRIMAIRE SLEUTEL VALLEN
Als "--alter" "DROP PRIMARY KEY" bevat (niet hoofdletter- en spatiegevoelig), wordt een waarschuwing
wordt afgedrukt en het gereedschap wordt afgesloten, tenzij "--dry-run" is opgegeven. Het wijzigen van de
primaire sleutel kan gevaarlijk zijn, maar de tool kan het aan. De triggers van de tool,
met name de DELETE-trigger, worden het meest beïnvloed door het wijzigen van de primaire sleutel
omdat de tool de voorkeur geeft aan het gebruik van de primaire sleutel voor zijn triggers. Je zou moeten
voer eerst de tool uit met "--dry-run" en "--print" en controleer of de triggers zijn
corrigeren.

--controle-interval
soort: tijd; standaard: 1

Slaaptijd tussen controles voor "--max-lag".

--[geen]controleplan
standaard: ja

Controleer uitvoeringsplannen voor query's op veiligheid. Deze optie zorgt er standaard voor dat het hulpprogramma wordt uitgevoerd
LEG UIT voordat u query's uitvoert die bedoeld zijn om toegang te krijgen tot een kleine hoeveelheid gegevens, maar
die toegang zou kunnen krijgen tot veel rijen als MySQL een slecht uitvoeringsplan kiest. Deze omvatten de
query's om chunk-grenzen en de chunk-query's zelf te bepalen. Als het verschijnt
dat MySQL een slecht query-uitvoeringsplan zal gebruiken, zal de tool het deel van het
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

Afbreken als er een replicatiefilter op een server is ingesteld. De tool zoekt naar server
opties die replicatie filteren, zoals binlog_ignore_db en repliceren_do_db. Als het
dergelijke filters vindt, wordt het afgebroken met een fout.

Als de replica's zijn geconfigureerd met filteropties, moet u oppassen dat u dit niet doet
om databases of tabellen te wijzigen die op de master staan ​​en niet op de replica's,
omdat dit ertoe kan leiden dat de replicatie mislukt. Voor meer informatie over replicatie
regels, ziehttp://dev.mysql.com/doc/en/replication-rules.html>.

--check-slaaf-vertraging
type: tekenreeks

Pauzeer het kopiëren van gegevens totdat de vertraging van deze replica kleiner is dan "--max-lag". De waarde is een
DSN die eigenschappen erft van de verbindingsopties ("--port", "--user",
enz.). Deze optie overschrijft het normale gedrag van zoeken en continu
monitoring van replicatievertraging op ALLE verbonden replica's. Als je niet wilt monitoren
ALLE replica's, maar u wilt dat er meer dan één replica wordt gecontroleerd, gebruik dan de
DSN-optie naar de optie "--recursion-method" in plaats van deze optie.

--chunk-index
type: tekenreeks

Geef de voorkeur aan deze index voor chunking-tabellen. Standaard kiest de tool 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 de tool terug naar de standaardwaarde
gedrag bij het kiezen van een index. De tool voegt de index toe aan de SQL-statements in a
"FORCE INDEX"-clausule. Wees voorzichtig bij het gebruik van deze optie; een slechte indexkeuze zou kunnen
slechte prestaties veroorzaken.

--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 elk gekopieerd stuk. Toegestane achtervoegsels zijn k, M, G.

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".

--limiet voor stukgrootte
soort: vlotter; standaard: 4.0

Kopieer geen brokken die veel groter zijn dan de gewenste brokkengrootte.

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 keer de limiet, dan slaat de tool het stuk over.

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. U kunt controle van te grote blokken uitschakelen door een waarde van 0 op te geven.

De tool gebruikt deze optie ook om te bepalen hoe externe sleutels die verwijzen moeten worden behandeld
de tabel die moet worden gewijzigd. Zie "--alter-foreign-keys-methode" voor details.

--stuk-tijd
soort: vlotter; standaard: 0.5

Pas de blokgrootte dynamisch aan, zodat elke query voor het kopiëren van gegevens zo lang duurt om uit te voeren.
De tool houdt de kopieersnelheid bij (rijen per seconde) en past de stukgrootte na elke kopie aan
data-copy query, zodat de volgende query deze hoeveelheid tijd (in seconden) nodig heeft
uitvoeren. Het houdt een exponentieel afnemend voortschrijdend gemiddelde van zoekopdrachten per seconde bij, dus
dat als de prestaties van de server veranderen als gevolg van veranderingen in de serverbelasting, de tool
past zich snel aan.

Als deze optie is ingesteld op nul, wordt de chunk-grootte niet automatisch aangepast, dus de querytijden wel
variëren, maar de grootte van queryblokken niet. Een andere manier om hetzelfde te doen is door a
waarde expliciet voor "--chunk-size", in plaats van deze op de standaardwaarde te laten staan.

--config
type: matrix

Lees deze door komma's gescheiden lijst met configuratiebestanden; indien opgegeven, moet dit de eerste zijn
optie op de opdrachtregel.

--kritieke belasting
type: matrix; standaard: Threads_running=50

Onderzoek SHOW GLOBAL STATUS na elke chunk en breek af als de belasting te hoog is. De
optie accepteert een door komma's gescheiden lijst van MySQL-statusvariabelen en -drempels. Een
optionele "=MAX_VALUE" (of ":MAX_VALUE") kan elke variabele volgen. Indien niet gegeven, de
tool bepaalt een drempel door de huidige waarde bij het opstarten te onderzoeken en deze te verdubbelen.

Zie "--max-load" voor meer details. Deze opties werken op dezelfde manier, behalve dat this
optie zal de werking van de tool afbreken in plaats van te pauzeren, en de standaardwaarde is
anders berekend als u geen drempel opgeeft. De reden voor deze optie is als een
veiligheidscontrole voor het geval de triggers op de originele tafel de server zo zwaar belasten
dat het downtime veroorzaakt. Er is waarschijnlijk geen enkele waarde van Threads_running
fout voor elke server, maar een standaardwaarde van 50 lijkt waarschijnlijk onaanvaardbaar hoog voor
de meeste servers, wat aangeeft dat de bewerking onmiddellijk moet worden geannuleerd.

--databank
korte vorm: -D; type: tekenreeks

Maak verbinding met deze database.

--standaard-engine
Verwijder "ENGINE" uit de nieuwe tabel.

Standaard wordt de nieuwe tabel gemaakt met dezelfde tabelopties als de originele tabel,
dus als de originele tabel InnoDB gebruikt, zal de nieuwe tabel InnoDB gebruiken. In bepaalde
gevallen waarbij sprake is van replicatie, kan dit leiden tot onbedoelde wijzigingen aan replica's die gebruikmaken van een
verschillende engine voor dezelfde tafel. Als u deze optie opgeeft, wordt de nieuwe tabel
worden gemaakt met de standaard engine van het systeem.

--defaults-bestand
korte vorm: -F; type: tekenreeks

Lees alleen mysql-opties uit het opgegeven bestand. U moet een absolute padnaam opgeven.

--[no]drop-new-table
standaard: ja

Laat de nieuwe tabel vallen als het kopiëren van de originele tabel mislukt.

Specificeren van "--no-drop-new-table" en "--no-swap-tables" laat de nieuwe, gewijzigde kopie achter
van de tabel zonder de oorspronkelijke tabel te wijzigen. Zie "--nieuwe-tabelnaam".

--no-drop-new-table werkt niet met "alter-foreign-keys-method drop_swap".

--[no]drop-old-table
standaard: ja

Zet de originele tabel neer na het hernoemen. Nadat de originele tafel is geweest
met succes hernoemd om de nieuwe tabel zijn plaats te laten innemen, en als er geen fouten zijn,
de tool laat standaard de originele tabel vallen. Als er fouten zijn, wordt de tool verlaten
de originele tafel op zijn plaats.

Als "--no-swap-tables" is gespecificeerd, dan is er geen oude tabel om te verwijderen.

--[geen]drop-triggers
standaard: ja

Laat triggers op de oude tafel vallen. "--no-drop-triggers" forceert "--no-drop-old-table".

--oefening
Maak en wijzig de nieuwe tabel, maar maak geen triggers, kopieer geen gegevens of vervang de
originele tafel.

--uitvoeren
Geef aan dat u de documentatie heeft gelezen en de tabel wilt wijzigen. Je moet
geef deze optie op om de tabel te wijzigen. Als u dat niet doet, werkt de tool alleen
enkele veiligheidscontroles en vertrek. Dit helpt ervoor te zorgen dat u de documentatie hebt gelezen
en begrijp hoe u deze tool moet gebruiken. Als u de documentatie niet hebt gelezen, doe dat dan
specificeer deze optie niet.

--kracht
Deze optie omzeilt de bevestiging in het geval van gebruik van alter-foreign-keys-method = none ,
die buitenlandse sleutelbeperkingen kunnen doorbreken.

--help
Help weergeven en afsluiten.

--gastheer
korte vorm: -h; type: tekenreeks

Maak verbinding met host.

--max-flow-ctl
type: vlotter

Enigszins vergelijkbaar met --max-lag, maar dan voor PXC-clusters. Controleer de gemiddelde tijd die het cluster besteedt
pauzeren voor Flow Control en laat het gereedschap pauzeren als het het aangegeven percentage overschrijdt
bij de optie. Een waarde van 0 zorgt ervoor dat het gereedschap pauzeert wanneer *elke* Flow Control
activiteit wordt gedetecteerd. Standaard is geen Flow Control-controle. Deze optie is beschikbaar
voor PXC-versies 5.6 of hoger.

--max-vertraging
type: tijd; standaard: 1s

Pauzeer het kopiëren van gegevens totdat de vertraging van alle replica's kleiner is dan deze waarde. Na elke data-
kopieerquery (elk stuk), kijkt de tool naar de replicatievertraging van alle replica's naar
waarmee het verbinding maakt, met behulp van Seconds_Behind_Master. Als een replica meer achterblijft dan
de waarde van deze optie, dan slaapt de tool gedurende "--check-interval" seconden,
controleer dan alle replica's opnieuw. Als u "--check-slave-lag" opgeeft, dan wordt alleen de tool gebruikt
onderzoekt die server op vertraging, niet alle servers. Als u precies wilt bepalen welke
servers die door het hulpprogramma worden gecontroleerd, gebruiken de DSN-waarde voor "--recursion-method".

De tool wacht eeuwig totdat replica's niet meer achterblijven. Als een replica wordt gestopt, wordt het
tool wacht eeuwig totdat de replica wordt gestart. Het kopiëren van gegevens gaat door wanneer alles
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.

--max-belasting
type: matrix; standaard: Threads_running=25

Onderzoek SHOW GLOBAL STATUS na elk stuk en pauzeer als er statusvariabelen zijn
boven hun drempels. De optie accepteert een door komma's gescheiden lijst van MySQL
statusvariabelen. Een optionele "=MAX_VALUE" (of ":MAX_VALUE") kan elk volgen
variabel. Indien niet gegeven, bepaalt de tool een drempel door de stroom te onderzoeken
waarde en vermeerder deze met 20%.

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 query's voor het kopiëren van gegevens opdringerig zijn, of als ze vergrendelingswachten veroorzaken, dan
andere vragen op de server zullen de neiging hebben om te blokkeren en in de wachtrij te staan. Dit veroorzaakt meestal
Threads_running neemt toe en de tool kan dat detecteren door SHOW GLOBAL uit te voeren
STATUS onmiddellijk nadat elke zoekopdracht is voltooid. Als u hiervoor een drempel opgeeft
variabele, dan kunt u de tool instrueren om te wachten totdat query's normaal worden uitgevoerd
opnieuw. Dit voorkomt wachtrijen echter niet; het geeft de server alleen maar een kans
om te herstellen van de wachtrij. Als u wachtrijen opmerkt, kunt u het beste de wachtrij verkleinen
stuk tijd.

--nieuwe-tabelnaam
type: tekenreeks; standaard: %T_nieuw

Nieuwe tabelnaam voordat deze wordt verwisseld. %T wordt vervangen door de oorspronkelijke tabelnaam.
Wanneer de standaardwaarde wordt gebruikt, voegt de tool de naam toe met maximaal 10 "_" (underscore) tot
zoek een unieke tabelnaam. Als er een tabelnaam is opgegeven, wordt deze niet voorafgegaan door de tool
met "_", dus de tabel mag niet bestaan.

--wachtwoord
korte vorm: -p; type: tekenreeks

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_online_schema_change_plugin" definieert. Een plug-in
stelt u in staat een Perl-module te schrijven die kan worden gekoppeld aan vele delen van pt-online-schema-
wijziging. Dit vereist een goede kennis van Perl en Percona Toolkit-conventies, die
vallen buiten het bestek van deze documentatie. Neem contact op met Percona als je dat hebt
vragen of hulp nodig hebben.

Zie "PLUGIN" voor meer informatie.

--haven
korte vorm: -P; typ: int

Poortnummer dat moet worden gebruikt voor verbinding.

--afdrukken
Druk SQL-statements af naar STDOUT. Als u deze optie opgeeft, kunt u de meeste van de
statements die de tool uitvoert. U kunt deze optie gebruiken met "--dry-run", bijv
voorbeeld.

--voortgang
type: reeks; standaard: tijd,30

Druk voortgangsrapporten af ​​naar STDERR tijdens het kopiëren van rijen. De waarde is door komma's gescheiden
lijst met twee delen. Het eerste deel kan een percentage, tijd of iteraties zijn; de
tweede deel geeft aan hoe vaak een update moet worden afgedrukt, in percentage, seconden,
of aantal iteraties.

--stil
korte vorm: -q

Druk geen berichten af ​​naar STDOUT (schakelt "--progress" uit). Fouten en waarschuwingen zijn
nog steeds afgedrukt naar STDERR.

--recursie
typ: int

Aantal niveaus dat moet worden herhaald in de hiërarchie bij het detecteren van replica's. Standaard is
oneindig. Zie ook "--recursie-methode".

--recursie-methode
type: reeks; standaard: proceslijst,hosts

Geprefereerde recursiemethode voor het ontdekken van replica's. Mogelijke methodes zijn:

METHODE TOEPASSINGEN
=========== ==================
proceslijst TOON PROCESLIJST
gastheren TOON SLAVE GASTHEREN
dsn=DSN DSN's uit een tabel
geen Vind geen slaven

De proceslijstmethode is de standaard, omdat SHOW SLAVE HOSTS niet betrouwbaar is.
De hosts-methode kan echter beter werken als de server een niet-standaardpoort gebruikt (niet
3306). De tool doet meestal het juiste en vindt alle replica's, maar u mag geven
een voorkeursmethode en deze zal als eerste worden gebruikt.

De hosts-methode vereist dat replica's worden geconfigureerd met report_host, report_port,
enz.

De dsn-methode is speciaal: het specificeert een tabel waaruit andere DSN-strings worden gelezen.
De opgegeven DSN moet een D en t specificeren, of een database-gekwalificeerde t. De DSN-tabel
moet de volgende structuur hebben:

MAAK TABEL `dsns` (
`Id` int(11) NIET NULL AUTO_INCREMENT,
`ouder_id` int(11) STANDAARD NUL,
`dsn` Varchar(255) NIET NUL,
PRIMAIRE SLEUTEL (`id`)
);

Om de tool alleen de hosts 10.10.1.16 en 10.10.1.17 te laten controleren op replicatievertraging,
voeg de waarden "h=10.10.1.16" en "h=10.10.1.17" in de tabel in. Momenteel is de
DSN's worden gesorteerd op id, maar anders worden id en parent_id genegeerd.

--set-vars
type: matrix

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
lock_wait_timeout=60

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.

--slaap
soort: vlotter; standaard: 0

Hoe lang slapen (in seconden) na het kopiëren van elk stuk. Deze optie is handig wanneer
throttling door "--max-lag" en "--max-load" zijn niet mogelijk. Een kleine, subseconde
waarde moet worden gebruikt, zoals 0.1, anders kan het kopiëren van de tool erg lang duren
grote tafels.

--stopcontact
korte vorm: -S; type: tekenreeks

Socketbestand om te gebruiken voor verbinding.

--statistieken
Print statistieken over interne tellers. Dit is handig om te zien hoeveel waarschuwingen er zijn
werden onderdrukt in vergelijking met het aantal INSERT.

--[geen]tafels verwisselen
standaard: ja

Verwissel de originele tafel en de nieuwe, gewijzigde tafel. Deze stap voltooit het online
schemawijzigingsproces door de tabel met het nieuwe schema in de plaats te laten komen van de
originele tafel. De oorspronkelijke tabel wordt de "oude tabel" en de tool laat deze vallen
tenzij je "--[no]drop-old-table" uitschakelt.

--probeert
typ: array

Hoe vaak kritieke bewerkingen moeten worden geprobeerd. Als bepaalde bewerkingen mislukken vanwege niet-
fatale, herstelbare fouten, wacht de tool en probeert de bewerking opnieuw. Dit zijn
de bewerkingen die opnieuw worden geprobeerd, met hun standaard aantal pogingen en wachttijd
tussen pogingen (in seconden):

BEDIENING PROBEERT WACHTEN
================== ===== ====
create_triggers 10 1
drop_triggers 10 1
kopie_rijen 10 0.25
wissel_tabellen 10 1
update_foreign_keys 10 1
analyse_tabel 10 1

Om de standaardinstellingen te wijzigen, geeft u de nieuwe waarden op, zoals:

--probeert create_triggers:5:0.5,drop_triggers:5:0.5

Dat zorgt ervoor dat de tool "create_triggers" en "drop_triggers" 5 keer probeert met een 0.5
tweede wacht tussen pogingen. De indeling is dus:

operatie:probeert:wacht[,operatie:probeert:wacht]

Alle drie de waarden moeten worden opgegeven.

Merk op dat de meeste bewerkingen alleen in MySQL 5.5 en nieuwer worden beïnvloed door
"lock_wait_timeout" (zie "--set-vars") vanwege metadatavergrendelingen. De "copy_rows"
werking wordt in elke versie van MySQL beïnvloed door "innodb_lock_wait_timeout".

Voor het maken en verwijderen van triggers geldt het aantal pogingen voor elke "CREATE
TRIGGER" en "DROP TRIGGER" statement voor elke trigger. Voor het kopiëren van rijen, het nummer
van pogingen is van toepassing op elk stuk, niet op de hele tabel. Voor het verwisselen van tabellen, het aantal
van pogingen is meestal één keer van toepassing, omdat er meestal maar één "TABEL RENAME" is
stelling. Voor het opnieuw opbouwen van externe sleutelbeperkingen geldt het aantal pogingen voor
elke instructie ("ALTER"-instructies voor de "rebuild_constraints"
"--alter-foreign-keys-methode"; andere verklaringen voor de methode "drop_swap").

De tool probeert elke bewerking opnieuw als deze fouten optreden:

Lock wacht time-out (innodb_lock_wait_timeout en lock_wait_timeout)
Impasse gevonden
Query wordt gedood (KILL QUERY )
Verbinding wordt verbroken (KILL CONNECTION )
Verbinding met MySQL verbroken

In het geval van verloren of verbroken verbindingen, zal de tool automatisch opnieuw verbinding maken.

Mislukkingen en nieuwe pogingen worden geregistreerd in de "--statistieken".

--gebruiker
korte vorm: -u; type: tekenreeks

Gebruiker om in te loggen indien niet huidige gebruiker.

--versie
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 .

INPLUGGEN


Het bestand gespecificeerd door "--plugin" moet een aangeroepen klasse (dwz een pakket) definiëren
"pt_online_schema_change_plugin" met een subroutine "new()". De tool maakt een
instantie van deze klasse en roep alle hooks aan die het definieert. Er zijn geen haken vereist, maar a
plug-in is niet erg handig zonder hen.

Deze hooks, in deze volgorde, worden aangeroepen indien gedefinieerd:

init
before_create_new_table
after_create_new_table
before_alter_new_table
after_alter_new_table
before_create_triggers
after_create_triggers
before_copy_rows
after_copy_rows
before_swap_tables
after_swap_tables
before_update_foreign_keys
after_update_foreign_keys
before_drop_old_table
after_drop_old_table
voor_drop_triggers
voor_uitgang
get_slave_lag

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(
orig_tbl => $orig_tbl,
child_tables => $child_tables,
hernoemde_cols => $hernoemde_cols,
slaven => $slaven,
slave_lag_cxns => $slave_lag_cxns,
);
}

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

dsn: databank; kopie: ja

Database voor de oude en nieuwe tabel.

F

dsn: mysql_read_default_file; kopie: ja

Lees alleen de standaardopties van het opgegeven bestand

· 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: ja

Socketbestand om te gebruiken voor verbinding.

· T

dsn: tafel; kopiëren: nee

Tabel om te wijzigen.

· 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-online-schema-wijziging ... > 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.

Deze tool werkt alleen op MySQL 5.0.2 en nieuwere versies, omdat eerdere versies dat niet doen
ondersteuning van triggers.

Gebruik pt-online-schema-changep online met behulp van onworks.net-services



Nieuwste Linux & Windows online programma's