pt-online-schema-changep - Online în cloud

Aceasta este comanda pt-online-schema-changep care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


pt-online-schema-change - ALTERĂ tabele fără a le bloca.

REZUMAT


Utilizare: pt-online-schema-change [OPȚIUNI] DSN

pt-online-schema-change modifică structura unui tabel fără a bloca citirile sau scrierile.
Specificați baza de date și tabelul în DSN. Nu utilizați acest instrument înainte de a-l citi
documentația și verificarea cu atenție a copiilor de rezervă.

Adăugați o coloană la sakila.actor:

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

Schimbați sakila.actor în InnoDB, efectuând eficient OPTIMIZE TABLE într-un mod neblocant
modă pentru că este deja un tabel InnoDB:

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

RISCURI


Percona Toolkit este matur, dovedit în lumea reală și bine testat, dar toate bazele de date
instrumentele pot prezenta un risc pentru sistem și serverul bazei de date. Înainte de a utiliza acest instrument,
Vă rog:

· Citiți documentația instrumentului

· Examinați cunoscutele „BUGS” ale instrumentului

· Testați instrumentul pe un server care nu este de producție

· Faceți copii de rezervă ale serverului de producție și verificați copiile de rezervă

DESCRIERE


pt-online-schema-change emulează modul în care MySQL modifică tabelele intern, dar funcționează
pe o copie a tabelului pe care doriți să o modificați. Aceasta înseamnă că tabelul original nu este
blocat, iar clienții pot continua să citească și să modifice datele din acesta.

pt-online-schema-change funcționează prin crearea unei copii goale a tabelului pentru a modifica, modificând
după cum doriți, apoi copiați rândurile din tabelul original în noul tabel. Cand
copia este completă, se îndepărtează tabelul original și îl înlocuiește cu cel nou. De
implicit, elimină și tabelul original.

Procesul de copiere a datelor este efectuat în bucăți mici de date, care sunt variate pentru a încerca
faceți-le să se execute într-o anumită perioadă de timp (vezi „--chunk-time”). Acest proces este foarte
similar cu modul în care funcționează alte instrumente, cum ar fi pt-table-checksum. Orice modificări ale datelor în
tabelele originale în timpul copierii vor fi reflectate în noul tabel, deoarece instrumentul
creează declanșatori pe tabelul original pentru a actualiza rândurile corespunzătoare din noul tabel.
Utilizarea declanșatoarelor înseamnă că instrumentul nu va funcționa dacă sunt deja definite declanșatoare
pe masă.

Când instrumentul termină de copiere a datelor în noul tabel, folosește o „RENUMIRE TABEL” atomică
operațiune pentru a redenumi simultan tabelele originale și noi. După ce aceasta este finalizată,
instrumentul scade tabelul original.

Cheile străine complică funcționarea instrumentului și introduc riscuri suplimentare. Tehnica
de redenumirea atomică a tabelelor originale și noi nu funcționează când se referă cheile străine
la masă. Instrumentul trebuie să actualizeze cheile externe pentru a se referi la noul tabel după schemă
schimbarea este completă. Instrumentul acceptă două metode pentru a realiza acest lucru. Poți citi
mai multe despre asta în documentația pentru „--alter-foreign-keys-method”.

Cheile străine provoacă, de asemenea, unele efecte secundare. Masa finală va avea aceleași chei străine
și indexează ca tabelul original (cu excepția cazului în care specificați diferit în ALTER
declarație), dar numele obiectelor pot fi modificate ușor pentru a evita numele obiectului
coliziuni în MySQL și InnoDB.

Pentru siguranță, instrumentul nu modifică tabelul decât dacă specificați opțiunea „--execute”,
care nu este activat implicit. Instrumentul acceptă o varietate de alte măsuri de prevenire
încărcare nedorită sau alte probleme, inclusiv detectarea automată a replicilor, conectarea la
acestea și utilizând următoarele verificări de siguranță:

· În cele mai multe cazuri, unealta va refuza să funcționeze dacă nu există o CHEIE PRIMARĂ sau INDEX UNIC
prezente în tabel. Consultați „--alter” pentru detalii.

· Instrumentul refuză să funcționeze dacă detectează filtre de replicare. Vedea
„--[no]check-replication-filters” pentru detalii.

· Instrumentul întrerupe operația de copiere a datelor dacă observă replici care sunt întârziate
în replicare. Consultați „--max-lag” pentru detalii.

· Instrumentul își întrerupe sau întrerupe funcționarea dacă detectează prea multă încărcare pe server. Vedea
„--max-load” și „--critical-load” pentru detalii.

· Instrumentul setează „innodb_lock_wait_timeout=1” și (pentru MySQL 5.5 și mai nou)
„lock_wait_timeout=60”, astfel încât este mai probabil să fie victima oricărei blocări
dispute și mai puțin probabil să perturbe alte tranzacții. Aceste valori pot fi
modificat prin specificarea „--set-vars”.

· Instrumentul refuză să modifice tabelul dacă constrângerile de cheie străină îl fac referire, cu excepția cazului în care
specificați „--alter-foreign-keys-method”.

· Instrumentul nu poate modifica tabelele MyISAM pe nodurile „Percona XtraDB Cluster”.

percona XtraDB Grup


pt-online-schema-change funcționează cu Percona XtraDB Cluster (PXC) 5.5.28-23.7 și mai noi, dar
există două limitări: numai tabelele InnoDB pot fi modificate și „wsrep_OSU_method” trebuie
fi setat la „TOI” (izolare totală a comenzii). Instrumentul iese cu o eroare dacă gazda este a
nodul cluster și tabelul este MyISAM sau este convertit în MyISAM ("ENGINE=MyISAM"), sau
dacă „wsrep_OSU_method” nu este „TOI”. Nu există nicio modalitate de a dezactiva aceste verificări.

REZULTATE


Instrumentul imprimă informații despre activitățile sale către STDOUT, astfel încât să puteți vedea despre ce este vorba
face. În timpul fazei de copiere a datelor, imprimă rapoarte „--progress” către STDERR. Poți obține
informații suplimentare prin specificarea „--print”.

Dacă se specifică „--statistics”, este tipărit un raport cu diverse numărări de evenimente interne
finalul, cum ar fi:

# Număr de evenimente
# ====== =====
# INSERT 1

OPŢIUNI


„--dry-run” și „--execute” se exclud reciproc.

Acest instrument acceptă argumente suplimentare de linie de comandă. Consultați „SINOPSIS” și utilizare
informatii pentru detalii.

--modifica
tip: sfoară

Modificarea schemei, fără cuvintele cheie ALTER TABLE. Puteți efectua mai multe
modificări ale tabelului prin specificarea lor cu virgule. Vă rugăm să consultați MySQL
manual pentru sintaxa lui ALTER TABLE.

Se aplică următoarele limitări care, dacă se încearcă, vor duce la defectarea instrumentului
moduri imprevizibile:

· În aproape toate cazurile, o CHEIE PRIMARĂ sau INDEX UNIC trebuie să fie prezentă în
masa. Acest lucru este necesar deoarece instrumentul creează un declanșator DELETE pentru a păstra
tabel nou actualizat în timp ce procesul rulează.

O excepție notabilă este atunci când se creează o CHEIE PRIMARĂ sau un INDEX UNIC
existent coloane ca parte a clauzei ALTER; în acest caz va folosi acestea
coloana(e) pentru declanșatorul DELETE.

· Clauza „RENAME” nu poate fi folosită pentru a redenumi tabelul.

· Coloanele nu pot fi redenumite prin eliminarea și adăugarea din nou cu noul nume. Unealta
nu va copia datele coloanei originale în noua coloană.

· Dacă adăugați o coloană fără o valoare implicită și o faceți NU NULL, instrumentul o va face
eșuează, deoarece nu va încerca să ghicească o valoare implicită pentru tine; Trebuie să specificați
Mod implicit.

· „DROP FOREIGN KEY constraint_name” necesită specificarea „_constraint_name” mai degrabă
decât adevăratul „nume_constrângere”. Din cauza unei limitări în MySQL, pt-online-schema-
modificare adaugă o liniuță de subliniere la numele constrângerilor de cheie străină la crearea
masa noua. De exemplu, pentru a renunța la această constrângere:

CONSTRAINT `fk_foo` CHEIE străină (`foo_id`) REFERINȚE `bar` (`foo_id`)

Trebuie să specificați „--alter „DROP FOREIGN KEY _fk_foo””.

· Instrumentul nu folosește „LOCK IN SHARE MODE” cu MySQL 5.0 deoarece poate cauza a
eroare slave care întrerupe replicarea:

Interogarea a cauzat erori diferite pe master și slave. Eroare pe master:
„Deadlock găsit când încercam să obții blocarea; încercați să reporniți tranzacția” (1213),
Eroare pe slave: „nicio eroare” (0). Baza de date implicită: „pt_osc”.
Interogare: „INSERT INTO pt_osc.t (id, c) VALUES („730”, „new row”)”

Eroarea apare la conversia unui tabel MyISAM în InnoDB, deoarece MyISAM nu este
tranzacțional, dar InnoDB este tranzacțional. MySQL 5.1 și mai nou se ocupă de acest caz
corect, dar testarea reproduce eroarea 5% din timp cu MySQL 5.0.

Acesta este un bug MySQL, similar cuhttp://bugs.mysql.com/bug.php?id=45694>, dar
nu există nicio remediere sau soluție în MySQL 5.0. Fără „LOCK IN SHARE MODE”, teste
trece 100% din timp, așa că ar trebui să existe riscul de pierdere a datelor sau de întrerupere a replicării
neglijabil.

Be sigur la verifica il nou tabel if folosind MySQL 5.0 și de conversie a de la MyISAM la
InnoDB!

--alter-chei-străine-metoda
tip: sfoară

Cum se modifică cheile străine astfel încât să facă referire la noul tabel. Chei străine care
referință tabelul care urmează să fie modificat trebuie tratate special pentru a se asigura că acestea
continuați să faceți referire la tabelul corect. Când instrumentul redenumește tabelul original în
lăsați-l pe cel nou să-i ia locul, cheile străine „urmează” tabelul redenumit și trebuie
fi schimbat pentru a face referire la noul tabel.

Instrumentul acceptă două tehnici pentru a realiza acest lucru. Găsește automat „copil
tabele" care fac referire la tabelul care trebuie modificat.

Auto
Determinați automat care metodă este cea mai bună. Instrumentul folosește „rebuild_constraints”
dacă este posibil (a se vedea descrierea acelei metode pentru detalii), iar dacă nu, atunci aceasta
folosește „drop_swap”.

rebuild_constraints
Această metodă folosește „ALTER TABLE” pentru a elimina și a adăuga din nou constrângerile cheii străine care
referiți la noul tabel. Aceasta este tehnica preferată, cu excepția cazului în care una sau mai multe dintre ele
tabelele „copil” sunt atât de mari încât „ALTER” ar dura prea mult. Unealta
determină că prin compararea numărului de rânduri din tabelul copil cu rata la
pe care instrumentul este capabil să copieze rânduri din tabelul vechi în tabelul nou. Dacă
instrumentul estimează că tabelul copil poate fi modificat în mai puțin timp decât cel
„--chunk-time”, atunci va folosi această tehnică. În scopul estimării
timpul necesar pentru a modifica tabelul copil, instrumentul multiplică rata de copiere a rândurilor
prin „--chunk-size-limit”, deoarece „ALTER TABLE” din MySQL este de obicei mult mai rapid
decât procesul extern de copiere a rândurilor.

Din cauza unei limitări în MySQL, cheile străine nu vor avea aceleași nume după
ALTER ceea ce au făcut înainte. Instrumentul trebuie să redenumească cheia externă atunci când aceasta
îl redefinește, ceea ce adaugă numelui o liniuță de subliniere. În unele cazuri, MySQL
de asemenea, redenumește automat indecșii necesari pentru cheia externă.

drop_swap
Dezactivați verificările cheilor străine (FOREIGN_KEY_CHECKS=0), apoi aruncați tabelul original
înainte de a redenumi noul tabel în locul său. Acest lucru este diferit de normal
metoda de schimbare a tabelului vechi cu cel nou, care folosește un „RENUMIRE” atomic, adică
nedetectabil pentru aplicațiile client.

Această metodă este mai rapidă și nu blochează, dar este mai riscantă din două motive.
În primul rând, pentru o perioadă scurtă de timp între scăparea tabelului original și redenumirea tabelului
tabel temporar, tabelul care trebuie modificat pur și simplu nu există și interogări
împotriva acestuia va avea ca rezultat o eroare. În al doilea rând, dacă există o eroare și noul
tabelul nu poate fi redenumit în locul celui vechi, atunci este prea târziu
anulați, deoarece vechea masă a dispărut definitiv.

Această metodă forțează „--no-swap-tables” și „--no-drop-old-table”.

nici unul
Această metodă este ca „drop_swap” fără „swap”. Orice chei externe care
referit, tabelul original va face referire acum la un tabel inexistent. Asta va
de obicei provoacă încălcări ale cheilor externe care sunt vizibile în „SHOW ENGINE INNODB
STARE", similar cu următorul:

Încercarea de a adăuga la index tuplu `idx_fk_staff_id`:
TUPLU DE DATE: 2 câmpuri;
0: len 1; hex 05; asc ;;
1: len 4; hex 80000001; asc ;;
Dar masa părinte `sakila`.`staff_old`
sau fișierul său .ibd nu există în prezent!

Acest lucru se datorează faptului că tabelul original (în acest caz, sakila.staff) a fost redenumit în
sakila.staff_old și apoi scăpat. Această metodă de gestionare a constrângerilor de cheie străină
este furnizat astfel încât administratorul bazei de date să poată dezactiva instrumentul încorporat
funcționalitate dacă se dorește.

--[no]analizează-înainte-schimb
implicit: da

Executați ANALYZE TABLE pe noul tabel înainte de a schimba cu cel vechi. În mod implicit,
acest lucru se întâmplă numai când rulați MySQL 5.6 și mai nou, iar „innodb_stats_persistent” este
activat. Specificați opțiunea în mod explicit pentru a o activa sau dezactiva, indiferent de MySQL
versiune și „innodb_stats_persistent”.

Acest lucru eludează o problemă potențial serioasă legată de statisticile optimizatorului InnoDB.
Dacă tabelul alertat este ocupat și instrumentul se finalizează rapid, noul tabel o va face
nu au statistici de optimizare după ce a fost schimbat. Acest lucru poate provoca o utilizare rapidă a indexului
interogări pentru a efectua scanări complete de tabel până când statisticile optimizatorului sunt actualizate (de obicei după
10 secunde). Dacă tabela este mare și serverul foarte ocupat, acest lucru poate cauza o întrerupere.

--cere-trece
Solicitați o parolă când vă conectați la MySQL.

--charset
forma scurta: -A; tip: sfoară

Set de caractere implicit. Dacă valoarea este utf8, setează binmode al lui Perl pe STDOUT la utf8,
transmite opțiunea mysql_enable_utf8 la DBD::mysql și rulează SET NAMES UTF8 după
conectarea la MySQL. Orice altă valoare setează binmode pe STDOUT fără stratul utf8,
și rulează SET NAMES după conectarea la MySQL.

--[no]check-alter
implicit: da

Analizează „--alter” specificat și încearcă să avertizeze despre un posibil comportament nedorit.
În prezent, verifică:

Redenumirile coloanelor
În versiunile anterioare ale instrumentului, redenumirea unei coloane cu „SCHIMBĂ numele coloanei
new_name" ar duce la pierderea datelor coloanei respective. Instrumentul analizează acum
alter instrucțiune și încearcă să prindă aceste cazuri, astfel încât coloanele redenumite ar trebui să aibă
aceleași date ca și originalele. Cu toate acestea, codul care face acest lucru nu este un complet-
analizator SQL suflat, deci ar trebui mai întâi să rulați instrumentul cu „--dry-run” și „--print”
și verificați dacă detectează corect coloanele redenumite.

PIDĂ CHEIA PRIMARĂ
Dacă „--alter” conține „DROP PRIMARY KEY” (insensibil la majuscule și la spațiu), un avertisment
este imprimat și instrumentul iese dacă nu este specificat „--dry-run”. Modificarea
cheia primară poate fi periculoasă, dar instrumentul o poate descurca. Declanșatoarele instrumentului,
în special declanșatorul DELETE, sunt cel mai afectați de modificarea cheii primare
deoarece instrumentul preferă să folosească cheia primară pentru declanșatoarele sale. Tu ar trebui
mai întâi rulați instrumentul cu „--dry-run” și „--print” și verificați dacă declanșatorii sunt
corecta.

--check-interval
tip: timp; implicit: 1

Timp de somn între verificări pentru „--max-lag”.

--[fără]check-plan
implicit: da

Verificați planurile de execuție a interogărilor pentru siguranță. În mod implicit, această opțiune determină rularea instrumentului
EXPLICAȚI înainte de a executa interogări care sunt menite să acceseze o cantitate mică de date, dar
care ar putea accesa multe rânduri dacă MySQL alege un plan de execuție prost. Acestea includ
interogări pentru a determina limitele blocurilor și interogările blocului în sine. Dacă apare
că MySQL va folosi un plan prost de execuție a interogărilor, instrumentul va omite o parte din
tabel.

Instrumentul folosește mai multe euristici pentru a determina dacă un plan de execuție este prost. The
primul este dacă EXPLAIN raportează că MySQL intenționează să folosească indexul dorit pentru a accesa
rândurile. Dacă MySQL alege un index diferit, instrumentul consideră că interogarea este nesigură.

Instrumentul verifică, de asemenea, cât de mult din indexul MySQL raportează pe care îl va folosi pentru
interogare. Ieșirea EXPLAIN arată acest lucru în coloana key_len. Instrumentul își amintește
cea mai mare key_len văzută și omite bucăți în care MySQL raportează că va folosi un mai mic
prefixul indexului. Această euristică poate fi înțeleasă ca omitere a bucăților care au a
plan de execuție mai rău decât alte bucăți.

Instrumentul imprimă un avertisment prima dată când o bucată este omisă din cauza unei execuții proaste
plan în fiecare tabel. Bucățile ulterioare sunt sărite în tăcere, deși puteți vedea
numărul de bucăți omise în coloana SKIPPED din rezultatul instrumentului.

Această opțiune adaugă ceva lucru de configurare la fiecare tabel și bucată. Deși munca nu este
intruziv pentru MySQL, are ca rezultat mai multe călătorii dus-întors la server, care consumă
timp. A face bucăți prea mici va face ca suprafața să devină relativ mai mare. Aceasta
Prin urmare, este recomandat să nu faceți bucăți prea mici, deoarece unealta poate lua
un timp foarte lung de finalizat dacă o faci.

--[no]check-replication-filters
implicit: da

Anulați dacă este setat vreun filtru de replicare pe orice server. Instrumentul caută server
opțiuni care filtrează replicarea, cum ar fi binlog_ignore_db și replicate_do_db. Daca
găsește astfel de filtre, se anulează cu o eroare.

Dacă replicile sunt configurate cu opțiuni de filtrare, ar trebui să fii atent
pentru a modifica orice baze de date sau tabele care există pe master și nu pe replici,
deoarece ar putea duce la eșecul replicării. Pentru mai multe informații despre replicare
reguli, vezihttp://dev.mysql.com/doc/en/replication-rules.html>.

--check-slave-lag
tip: sfoară

Întrerupeți copia datelor până când decalajul acestei replici este mai mic decât „--max-lag”. Valoarea este a
DSN care moștenește proprietăți din opțiunile de conectare ("--port", "--user",
etc.). Această opțiune anulează comportamentul normal de căutare și continuu
monitorizarea decalajului de replicare pe TOATE replicile conectate. Dacă nu vrei să monitorizezi
TOATE replicile, dar doriți ca mai mult decât o singură replică să fie monitorizată, apoi utilizați
opțiunea DSN la opțiunea „--recursion-method” în loc de această opțiune.

--chink-index
tip: sfoară

Preferați acest index pentru tabelele de fragmentare. În mod implicit, instrumentul alege cel mai mult
indice adecvat pentru fragmentare. Această opțiune vă permite să specificați indexul pe care îl aveți
prefera. Dacă indexul nu există, atunci instrumentul va reveni la valoarea implicită
comportamentul alegerii unui index. Instrumentul adaugă indexul la instrucțiunile SQL din a
Clauza „INDEX DE FORȚĂ”. Aveți grijă când utilizați această opțiune; o alegere proastă a indicelui ar putea
cauza performanțe proaste.

--coloane-index-bucăți
tip: int

Folosiți doar atâtea coloane din stânga unui „--chunk-index”. Acest lucru funcționează numai pentru
indecși compuși și este util în cazurile în care există o eroare în optimizatorul de interogări MySQL
(planificatorul) îl face să scaneze o gamă largă de rânduri în loc să folosească indexul pentru a localiza
punctele de început și de sfârșit exact. Această problemă apare uneori pe indexurile cu
multe coloane, cum ar fi 4 sau mai multe. Dacă se întâmplă acest lucru, instrumentul ar putea imprima un avertisment
legate de opțiunea „--[no]check-plan”. Instruiți instrumentul să folosească numai primul
N coloane ale indexului reprezintă o soluție pentru eroare în unele cazuri.

--dimensiunea bucatilor
tip: dimensiune; implicit: 1000

Numărul de rânduri de selectat pentru fiecare bucată copiată. Sufixele permise sunt k, M, G.

Această opțiune poate suprascrie comportamentul implicit, care este ajustarea dimensiunii bucăților
dinamic pentru a încerca să facă bucăți să ruleze exact în secunde „--chunk-time”. Când aceasta
opțiunea nu este setată în mod explicit, valoarea sa implicită este folosită ca punct de plecare, dar după
că, instrumentul ignoră valoarea acestei opțiuni. Dacă setați această opțiune în mod explicit,
cu toate acestea, apoi dezactivează comportamentul de ajustare dinamică și încearcă să facă toate bucățile
exact numărul specificat de rânduri.

Există o subtilitate: dacă indicele bucăților nu este unic, atunci este posibil ca bucățile
va fi mai mare decât se dorește. De exemplu, dacă un tabel este fragmentat de un index care
conține 10,000 dintr-o valoare dată, nu există nicio modalitate de a scrie o clauză WHERE care să se potrivească
doar 1,000 dintre valori, iar acea bucată va avea cel puțin 10,000 de rânduri. Un astfel de
chunk va fi probabil sărit din cauza „--chunk-size-limit”.

--limită-dimensiune-bucătă
tip: plutitor; implicit: 4.0

Nu copiați bucăți atât de mari decât dimensiunea dorită.

Când un tabel nu are indici unici, dimensiunile bucăților pot fi inexacte. Această opțiune
specifică o limită maximă tolerabilă a inexactității. Instrumentul folosește la
estimați câte rânduri sunt în bucată. Dacă această estimare depășește porțiunea dorită
dimensiunea înmulțită cu limita, apoi instrumentul omite o bucată.

Valoarea minimă pentru această opțiune este 1, ceea ce înseamnă că nicio bucată nu poate fi mai mare decât
„--dimensiunea bucății”. Probabil că nu doriți să specificați 1, deoarece rândurile raportate de
EXPLAIN sunt estimări, care pot fi diferite de numărul real de rânduri din
bucată mare. Puteți dezactiva verificarea blocurilor supradimensionate specificând o valoare de 0.

Instrumentul folosește, de asemenea, această opțiune pentru a determina cum să gestioneze cheile străine la care se referă
masa de modificat. Consultați „--alter-foreign-keys-method” pentru detalii.

--bucat-timp
tip: plutitor; implicit: 0.5

Ajustați dinamic dimensiunea bucăților, astfel încât fiecare interogare de copiere a datelor să dureze atât de mult pentru a fi executată.
Instrumentul urmărește rata de copiere (rânduri pe secundă) și ajustează dimensiunea bucăților după fiecare
interogare de copiere a datelor, astfel încât următoarea interogare să dureze această perioadă de timp (în secunde).
a executa. Păstrează o medie mobilă în descompunere exponențială a interogărilor pe secundă, așadar
că dacă performanța serverului se modifică din cauza modificărilor încărcării serverului, instrumentul
se adapteaza rapid.

Dacă această opțiune este setată la zero, dimensiunea fragmentului nu se ajustează automat, deci timpii de interogare vor fi
variază, dar dimensiunile fragmentelor de interogare nu vor varia. O altă modalitate de a face același lucru este să specificați a
valoare pentru „--chunk-size” în mod explicit, în loc să o lase la valoarea implicită.

--config
tip: Array

Citiți această listă de fișiere de configurare separate prin virgulă; dacă este specificat, acesta trebuie să fie primul
opțiunea de pe linia de comandă.

--sarcina-critică
tip: Array; implicit: Threads_running=50

Examinați SHOW GLOBAL STATUS după fiecare bucată și anulați dacă sarcina este prea mare. The
opțiunea acceptă o listă separată prin virgulă de variabile de stare MySQL și praguri. Un
opțional „=MAX_VALUE” (sau „:MAX_VALUE”) poate urma fiecare variabilă. Dacă nu este dat,
instrumentul determină un prag examinând valoarea curentă la pornire și dublând-o.

Consultați „--max-load” pentru mai multe detalii. Aceste opțiuni funcționează în mod similar, cu excepția faptului că aceasta
opțiunea va anula funcționarea instrumentului în loc să o întrerupă, iar valoarea implicită este
calculat diferit dacă nu specificați niciun prag. Motivul acestei opțiuni este ca a
verificare de siguranță în cazul în care declanșatoarele de pe tabelul original adaugă atât de multă sarcină serverului
că provoacă timpi de nefuncţionare. Probabil că nu există o singură valoare pentru Threads_running
greșit pentru fiecare server, dar o valoare implicită de 50 pare să fie inacceptabil de mare pentru
majoritatea serverelor, indicând faptul că operațiunea ar trebui anulată imediat.

--Bază de date
forma scurta: -D; tip: sfoară

Conectați-vă la această bază de date.

--default-engine
Eliminați „MOTOR” din noul tabel.

Implicit, noul tabel este creat cu aceleași opțiuni de tabel ca și tabelul original,
deci, dacă tabelul original folosește InnoDB, atunci noul tabel va folosi InnoDB. În anumite
cazuri care implică replicare, aceasta poate provoca modificări neintenționate asupra replicilor care utilizează a
motor diferit pentru aceeași masă. Specificarea acestei opțiuni determină noul tabel
fi creat cu motorul implicit al sistemului.

--defaults-file
forma scurtă: -F; tip: sfoară

Citiți numai opțiunile mysql din fișierul dat. Trebuie să dați un nume de cale absolut.

--[no]drop-new-table
implicit: da

Aruncă noul tabel dacă copierea tabelului original eșuează.

Specificarea „--no-drop-new-table” și „--no-swap-tables” lasă noua copie modificată
a tabelului fără a modifica tabelul inițial. Vezi „--new-table-name”.

--no-drop-new-table nu funcționează cu „alter-foreign-keys-method drop_swap”.

--[no]drop-old-table
implicit: da

Aruncă tabelul original după ce îl redenumești. După ce tabelul original a fost
redenumit cu succes pentru a lăsa noul tabel să-și ia locul și, dacă nu există erori,
instrumentul elimină tabelul original în mod implicit. Dacă există erori, instrumentul pleacă
masa originală la loc.

Dacă este specificat „--no-swap-tables”, atunci nu există un tabel vechi de aruncat.

--[fără]caderi de declanșare
implicit: da

Aruncă declanșatoarele pe vechea masă. „--no-drop-triggers” forțează „--no-drop-old-table”.

--funcție uscată
Creați și modificați noul tabel, dar nu creați declanșatori, nu copiați date sau înlocuiți
masa originala.

--a executa
Indicați că ați citit documentația și doriți să modificați tabelul. Trebuie să vă
specificați această opțiune pentru a modifica tabelul. Dacă nu, atunci instrumentul va funcționa numai
unele verificări de siguranță și ieșire. Acest lucru vă ajută să vă asigurați că ați citit documentația
și înțelegeți cum să utilizați acest instrument. Dacă nu ați citit documentația, atunci o faceți
nu specifica aceasta optiune.

--forta
Această opțiune ocolește confirmarea în cazul utilizării alter-foreign-keys-method = none ,
care ar putea rupe constrângerile cheii străine.

--Ajutor
Arată ajutor și ieși.

--gazdă
forma scurtă: -h; tip: sfoară

Conectați-vă la gazdă.

--max-flow-ctl
tip: plutitor

Oarecum similar cu --max-lag, dar pentru clusterele PXC. Verificați timpul mediu petrecut în cluster
pauză pentru Controlul fluxului și faceți pauza instrumentului dacă depășește procentul indicat
în opțiune. O valoare de 0 ar face ca instrumentul să se întrerupă atunci când *orice* control al fluxului
activitate este detectată. Implicit nu este verificarea controlului fluxului. Această opțiune este disponibilă
pentru versiunile PXC 5.6 sau mai recente.

--max-lag
tip: timp; implicit: 1s

Întrerupeți copia datelor până când decalajul tuturor replicilor este mai mic decât această valoare. După fiecare dată-
copiați interogarea (fiecare bucată), instrumentul analizează decalajul de replicare al tuturor replicilor către
pe care îl conectează, folosind Seconds_Behind_Master. Dacă vreo replică este în urmă mai mult decât
valoarea acestei opțiuni, apoi instrumentul va dormi timp de secunde „--check-interval”,
apoi verificați din nou toate replicile. Dacă specificați „--check-slave-lag”, atunci doar instrumentul
examinează acel server pentru decalaj, nu toate serverele. Dacă vrei să controlezi exact care
serverele pe care instrumentul le monitorizează, utilizați valoarea DSN la „--recursion-method”.

Instrumentul așteaptă pentru totdeauna ca replicile să nu mai rămână în urmă. Dacă orice replică este oprită,
instrumentul așteaptă pentru totdeauna până când replica este pornită. Copierea datelor continuă când toate
replicile rulează și nu rămân prea mult.

Instrumentul imprimă rapoarte de progres în timpul așteptării. Dacă o replică este oprită, se imprimă a
raport de progres imediat, apoi din nou la fiecare interval de raport de progres.

--incarcatura maxima
tip: Array; implicit: Threads_running=25

Examinați SHOW GLOBAL STATUS după fiecare bucată și întrerupeți dacă există variabile de stare
mai mari decât pragurile lor. Opțiunea acceptă o listă de MySQL separată prin virgulă
variabile de stare. Un „=MAX_VALUE” (sau „:MAX_VALUE”) opțional poate urma fiecare
variabil. Dacă nu este dat, instrumentul determină un prag examinând curentul
valoare și creșterea acesteia cu 20%.

De exemplu, dacă doriți ca instrumentul să se întrerupă atunci când Threads_connected devine prea mare, dvs
poate specifica „Threads_connected”, iar instrumentul va verifica valoarea curentă atunci când aceasta
începe să funcționeze și adăugați 20% la acea valoare. Dacă valoarea curentă este 100, atunci instrumentul
se va întrerupe când Threads_connected depășește 120 și va relua lucrul când este sub 120
din nou. Dacă doriți să specificați un prag explicit, cum ar fi 110, puteți utiliza oricare
„Threads_connected:110” sau „Threads_connected=110”.

Scopul acestei opțiuni este de a preveni ca unealta să adauge prea multă sarcină la
Server. Dacă interogările de copiere a datelor sunt intruzive sau provoacă așteptări de blocare, atunci
alte interogări de pe server vor avea tendința de a bloca și de a pune în coadă. Acest lucru va cauza de obicei
Threads_running să crească, iar instrumentul poate detecta asta rulând SHOW GLOBAL
STARE imediat după încheierea fiecărei interogări. Dacă specificați un prag pentru aceasta
variabilă, apoi puteți indica instrumentului să aștepte până când interogările rulează normal
din nou. Totuși, acest lucru nu va împiedica formarea la coadă; va oferi doar o șansă serverului
pentru a reveni din coadă. Dacă observați coadă, cel mai bine este să reduceți
timp bucată.

--new-table-name
tip: sfoară; implicit: %T_new

Nume nou tabel înainte de a fi schimbat. %T este înlocuit cu numele tabelului original.
Când este utilizată implicit, instrumentul prefixează numele cu până la 10 „_” (subliniere) pentru
găsiți un nume unic de tabel. Dacă este specificat un nume de tabel, instrumentul nu îl prefix
cu „_”, deci tabelul nu trebuie să existe.

--parola
forma scurta: -p; tip: sfoară

Parola de folosit la conectare. Dacă parola conține virgule, acestea trebuie să fie eliminate
cu o bară oblică inversă: „examen\,ple”

--pid
tip: sfoară

Creați fișierul PID dat. Instrumentul nu va porni dacă fișierul PID există deja și
PID-ul pe care îl conține este diferit de PID-ul curent. Cu toate acestea, dacă fișierul PID
există și PID-ul pe care îl conține nu mai rulează, instrumentul va suprascrie PID-ul
fișier cu PID-ul curent. Fișierul PID este eliminat automat când instrumentul iese.

--conecteaza
tip: sfoară

Fișier modul Perl care definește o clasă „pt_online_schema_change_plugin”. Un plugin
vă permite să scrieți un modul Perl care se poate conecta în multe părți ale pt-online-schema-
Schimbare. Acest lucru necesită o bună cunoaștere a convențiilor Perl și Percona Toolkit, care
depășesc acest scop al acestei documentații. Vă rugăm să contactați Percona dacă aveți
întrebări sau aveți nevoie de ajutor.

Consultați „PLUGIN” pentru mai multe informații.

--port
forma scurta: -P; tip: int

Numărul portului de utilizat pentru conexiune.

--imprimare
Tipăriți instrucțiunile SQL în STDOUT. Specificarea acestei opțiuni vă permite să vedeți majoritatea
instrucțiuni pe care instrumentul le execută. Puteți folosi această opțiune cu „--dry-run”, pentru
exemplu.

--progresa
tip: matrice; implicit: oră, 30

Imprimați rapoartele de progres către STDERR în timp ce copiați rândurile. Valoarea este separată prin virgulă
lista cu doua parti. Prima parte poate fi procent, timp sau iterații; cel
a doua parte specifică cât de des trebuie tipărită o actualizare, în procente, secunde,
sau numărul de iterații.

--Liniște
forma scurta: -q

Nu tipăriți mesaje către STDOUT (dezactivează „--progress”). Erorile și avertismentele sunt
încă tipărit la STDERR.

--recurs
tip: int

Numărul de niveluri de recurs în ierarhie la descoperirea replicilor. Implicit este
infinit. Vezi și „--recursie-method”.

--metoda-recursivă
tip: matrice; implicit: listă de procese, gazde

Metodă de recursivitate preferată pentru descoperirea replicilor. Metodele posibile sunt:

UTILIZĂRI METODEI
==============================
listă de procese AFIȘARE LISTA DE PROCESE
gazde SHOW SLAVE HOSTS
dsn=DSN-uri DSN dintr-un tabel
nici unul Nu găsi sclavi

Metoda listei de procese este implicită, deoarece SHOW SLAVE HOSTS nu este de încredere.
Cu toate acestea, metoda hosts poate funcționa mai bine dacă serverul folosește un port non-standard (nu
3306). Instrumentul face de obicei ceea ce trebuie și găsește toate replicile, dar puteți oferi
o metodă preferată și va fi folosită mai întâi.

Metoda hosts necesită configurarea replicilor cu report_host, report_port,
etc

Metoda dsn este specială: specifică un tabel din care sunt citite alte șiruri DSN.
DSN-ul specificat trebuie să specifice un D și t, sau un t calificat pentru baza de date. Tabelul DSN
ar trebui să aibă următoarea structură:

CREATE TABLE `dsns` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`părinte_id` int(11) DEFAULT NULL,
`dsn` varchar(255) NU NUL,
CHEIE PRIMARĂ („id”)
);

Pentru ca instrumentul să monitorizeze numai gazdele 10.10.1.16 și 10.10.1.17 pentru întârziere de replicare,
introduceți în tabel valorile „h=10.10.1.16” și „h=10.10.1.17”. În prezent, cel
DSN-urile sunt ordonate după id, dar id și parent_id sunt altfel ignorate.

--set-vars
tip: Array

Setați variabilele MySQL în această listă de perechi „variabilă=valoare”, separate prin virgulă.

În mod implicit, instrumentul setează:

wait_timeout=10000
innodb_lock_wait_timeout=1
lock_wait_timeout=60

Variabilele specificate pe linia de comandă înlocuiesc aceste valori implicite. De exemplu,
specificarea „--set-vars wait_timeout=500” înlocuiește valoarea implicită de 10000.

Instrumentul imprimă un avertisment și continuă dacă o variabilă nu poate fi setată.

--dormi
tip: plutitor; implicit: 0

Cât timp să dormi (în secunde) după copierea fiecărei bucăți. Această opțiune este utilă când
limitarea prin „--max-lag” și „--max-load” nu este posibilă. O mică, sub secundă
ar trebui utilizată valoarea, ca 0.1, altfel instrumentul ar putea dura foarte mult timp pentru a copia
mese mari.

--priză
forme scurte; tip: sfoară

Fișier socket de utilizat pentru conectare.

--statistici
Tipăriți statistici despre contoarele interne. Acest lucru este util pentru a vedea câte avertismente
au fost suprimate în comparație cu numărul de INSERT.

--[nu]masele de schimb
implicit: da

Schimbați tabelul original și cel nou, modificat. Acest pas completează online
procesul de schimbare a schemei făcând ca tabelul cu noua schemă să ia locul lui
masa originala. Tabelul inițial devine „tabelul vechi”, iar instrumentul îl scapă
cu excepția cazului în care dezactivați „--[no]drop-old-table”.

--încearcă
tip: matrice

De câte ori să încerci operațiuni critice. Dacă anumite operațiuni eșuează din cauza lipsei
erori fatale, recuperabile, instrumentul așteaptă și încearcă din nou operația. Acestea sunt
operațiunile care sunt reîncercate, cu numărul lor implicit de încercări și timpul de așteptare
între încercări (în secunde):

OPERAȚIA ÎNCERCĂ AȘTEPTĂ
========================= ====
create_triggers 10 1
drop_triggers 10 1
copy_rows 10 0.25
swap_tables 10 1
update_foreign_keys 10 1
analiza_tabel 10 1

Pentru a modifica valorile implicite, specificați noile valori precum:

--tries create_triggers:5:0.5,drop_triggers:5:0.5

Asta face ca instrumentul să încerce „create_triggers” și „drop_triggers” de 5 ori cu un 0.5
a doua așteptare între încercări. Deci formatul este:

operațiune:încearcă: așteptați[,operațiune:încearcă: așteptați]

Trebuie specificate toate cele trei valori.

Rețineți că majoritatea operațiunilor sunt afectate numai în MySQL 5.5 și mai nou de
„lock_wait_timeout” (vezi „--set-vars”) din cauza blocărilor metadatelor. „Copy_rows”
operațiunea este afectată în orice versiune de MySQL de „innodb_lock_wait_timeout”.

Pentru crearea și eliminarea declanșatorilor, numărul de încercări se aplică fiecărui „CREATE
TRIGGER” și instrucțiunea „DROP TRIGGER” pentru fiecare declanșator. Pentru copierea rândurilor, numărul
de încercări se aplică fiecărei bucăți, nu întregului tabel. Pentru schimbul de mese, numărul
de încercări se aplică de obicei o singură dată, deoarece există de obicei un singur „RENUMIRE TABEL”
afirmație. Pentru reconstruirea constrângerilor de cheie străină, se aplică numărul de încercări
fiecare instrucțiune ("ALTER" instrucțiuni pentru "rebuild_constraints"
„--metoda-alter-chei-străine”; alte instrucțiuni pentru metoda „drop_swap”).

Instrumentul reîncearcă fiecare operație dacă apar aceste erori:

Blocare timp de așteptare (innodb_lock_wait_timeout și lock_wait_timeout)
Blocaj găsit
Interogarea este oprită (KILL QUERY )
Conexiunea este întreruptă (KILL CONNECTION )
S-a pierdut conexiunea la MySQL

În cazul conexiunilor pierdute sau ucise, instrumentul se va reconecta automat.

Eșecurile și reîncercările sunt înregistrate în „--statistics”.

--utilizator
forma scurtă: -u; tip: sfoară

Utilizator pentru autentificare dacă nu este utilizator actual.

--versiune
Afișați versiunea și ieșiți.

--[no]verificare-versiune
implicit: da

Verificați cea mai recentă versiune de Percona Toolkit, MySQL și alte programe.

Aceasta este o funcție standard de „verificare automată a actualizărilor”, cu două suplimentare
Caracteristici. În primul rând, instrumentul verifică versiunea altor programe de pe sistemul local în
în plus față de propria sa versiune. De exemplu, verifică versiunea fiecărui server MySQL
se conectează la, Perl și modulul Perl DBD::mysql. În al doilea rând, verifică și avertizează
despre versiunile cu probleme cunoscute. De exemplu, MySQL 5.5.25 a avut o eroare critică și
a fost relansat ca 5.5.25a.

Orice actualizări sau probleme cunoscute sunt tipărite în STDOUT înainte de ieşirea normală a instrumentului.
Această caracteristică nu ar trebui să interfereze niciodată cu funcționarea normală a instrumentului.

Pentru mai multe informații, vizitați .

CONECTEAZA


Fișierul specificat de „--plugin” trebuie să definească o clasă (adică un pachet) numită
„pt_online_schema_change_plugin” cu o subrutină „new()”. Instrumentul va crea un
instanță a acestei clase și apelați orice cârlige pe care le definește. Nu sunt necesare cârlige, dar a
pluginul nu este foarte util fără ele.

Aceste cârlige, în această ordine, sunt numite dacă sunt definite:

înăuntru
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
before_drop_triggers
înainte de_ieșire
get_slave_lag

Fiecare cârlig primește argumente diferite. Pentru a vedea ce argumente sunt transmise unui cârlig,
căutați numele cârligului în codul sursă al instrumentului, cum ar fi:

# --plugin cârlig
if ( $plugin && $plugin->can('init') ) {
$plugin->init(
orig_tbl => $orig_tbl,
child_tables => $child_tables,
renamed_cols => $renamed_cols,
sclavi => $slaves,
slave_lag_cxns => $slave_lag_cxns,
);
}

Comentariul „# --plugin hook” precede fiecare apel de hook.

Vă rugăm să contactați Percona dacă aveți întrebări sau aveți nevoie de ajutor.

dsn OPŢIUNI


Aceste opțiuni DSN sunt folosite pentru a crea un DSN. Fiecare opțiune este dată ca „opțiune=valoare”.
Opțiunile sunt sensibile la majuscule, așa că P și p nu sunt aceeași opțiune. Nu poate exista
spații albe înainte sau după „=" și dacă valoarea conține spații albe, aceasta trebuie citată.
Opțiunile DSN sunt separate prin virgulă. Consultați pagina de manual percona-toolkit pentru detalii complete.

· ARE

dsn: set de caractere; copie: da

Set de caractere implicit.

· D

dsn: baza de date; copie: da

Baza de date pentru tabelul vechi și cel nou.

F

dsn: mysql_read_default_file; copie: da

Citiți numai opțiunile implicite din fișierul dat

· H

dsn: gazdă; copie: da

Conectați-vă la gazdă.

· p

dsn: parola; copie: da

Parola de folosit la conectare. Dacă parola conține virgule, acestea trebuie să fie eliminate
cu o bară oblică inversă: „examen\,ple”

· P

dsn: port; copie: da

Numărul portului de utilizat pentru conexiune.

· S

dsn: mysql_socket; copie: da

Fișier socket de utilizat pentru conectare.

· t

dsn: tabel; copie: nu

Tabel de modificat.

· u

dsn: utilizator; copie: da

Utilizator pentru autentificare dacă nu este utilizator actual.

MEDIUL


Variabila de mediu „PTDEBUG” permite ieșirea depanării detaliate către STDERR. Pentru a permite
depanarea și capturarea tuturor rezultatelor într-un fișier, rulați instrumentul ca:

PTDEBUG=1 pt-online-schema-change ... > FILE 2>&1

Fiți atenți: ieșirea de depanare este voluminoasă și poate genera câțiva megaocteți de ieșire.

SISTEM CERINȚE


Aveți nevoie de Perl, DBI, DBD::mysql și de câteva pachete de bază care ar trebui să fie instalate în orice
o versiune relativ nouă de Perl.

Acest instrument funcționează numai pe MySQL 5.0.2 și versiunile mai noi, deoarece versiunile anterioare nu
declanșatoare de sprijin.

Utilizați pt-online-schema-changep online folosind serviciile onworks.net



Cele mai recente programe online Linux și Windows