You are on page 1of 132
482 Partéaalika _Administrarea sistomului MySQL Cand serverul cteste continueal tabelului user, sorteaz’ intsirle in functie de valorile din coloanele Host si User. Valoarea Host este valoare dominanti (intritile cu aceeasi va~ loare Host sunt sortate impreund, apoi ordonate in functie de valoazea din coloana User) Totugi, sortarea n se exccutd in ordine lexicografici, ci numai partial. Principiul care teebuie resinut este acela ei valorilelierale sunt preferate in detsimentul modelelor, Aceasta inseamai ci, dack vi conectati de la boa. snake.net si exist’ intriri cu valocile boa.snake.net si %.snake.net in coloana Host, prima intrare va fi preferatd. Similac, ‘esanake.net este preferatd faph de ‘net, care la rindul siu este preferati fad de %. Suabilirea corespondenjelor pentru numerele IP funcrioneaza in acelasi mod. Pentru un client care se conectesza de la 0 gazdi cu un mumir IP 192.168.9.14, vor corespunde intririle 192.168.9.14, 192.168.3.4, 192. 168.5, 192.% gi in aceasté ordine Riscuri de evitat in ceea ce priveste tabelele de acordare Aces serine dese nel misuri de precae care weuie late i consderare tun cand acordati privilegi, precum si riscurile care insoyese opfiunile nechibzuite. In general cstede doris piviegile de super-uliator st fe ror cu csonomie Cue vane, au activayi privilgile din intririle tabelului user. Usilizagi in schimb celelale tabele de acordaes, pentru a limite privilegile utilizatorilor la anumite baze de date, tabele sau coloane. Privilegile din tabelul user permit utilizatorului si influenyeze operarea server- Joi dumneavoastrs,respectiv si obtind accesul la orice tabel din orice bazi de date. ‘Nu acordari privilegi pentru baza de date nysq. Un utilizator cu privilegiiasupra bazei de date care contine tabelele de acordare poate fi capabil si modificetabelele pentra a dobindi privilegi si asupra oricirei alte baze de date, Prin acordarea privlegillor care permit unui utilizator si modificetabelele din baza de date aysql, utilizatorul respectiv, dobindeste efectiv un privilegiu GRant global. Daci utlizarorul poate modifica tabelele jn mod direct, acest lucru este aproape echivalent cu posiblitatea de a emite orice instructiune GRANT care fi trece prin cap respectivulu. Privilegiul FILE este deosebic de periculos; mu-l acordapi cu uguringl. Ia un exemplu de acfiune pe care o poate executa un utilizator cu privilegiul FILE: CREATE TABLE ote parle (pwi_entey TEXT); LOAD DATA INFILE "/etc/passad* INTO TARIE ate_parole: SELECT * FROM ete_perole; Dupi ce a emis acesteinstructiun, utilizatorul dispune de consinucal figerului dumnea- voastr cu parole. De fapt, continutul orcivuifiscr care poate fi citt public din server este accesibil prin refea de eitre orice utilizator ca privilegial FILE, ‘De asemenea, privilegiul FILE poate fi exploatar pentru a compromite bazele de date pe sisteme care nu sunt configurate cu permisiuni de figier suficient de restrictive. Acesta este ua motiv pentru care trebuie si decided ca aumai serverul si poatd citi confinurul catalogului de date. Daca fisierele corespunzitoare tabelelor din bazele de date pot fi citite de oricine, atunci por fi citite mu numai de citre orice utilizator cu un cont pe gazda servecului, dar si de orice utilizator al programelor client cu privilegiul FILE care se poate conecta prin reqea! Urmitoarea procedurl demonstreazi cum se poate lucra: Capitolul 12 Securtats 483 © Creati un bel cu 0 coloani LovseLos USE test CREATE TABLE tap (b LONGBLOB) © Folosititakelul pentru a citi in acesta conyinutul fiecieuifisier corespunzitor tabelu- lui pe care dorigi sil furayi, dupi care seriesi conginutul tabelului intr-un figer din propria dumneavoastri bazi de date LORD DATE INFILE *. /other_cb/x.fra" INTO TABLE tmp FIELDS ESCAPED BY ** LINES TERMINATED BY ** SELECT * FROM tmp INTO OUTFILE *y.tra* FIELDS ESCAPED SY ** LINES TERMINATED BY “* OELETE FrOW ¢mp LOAD DATA INFILE */.other_db/x.180" INTO TABLE tap FIELDS ESCAPED BY ** LINES TERMINATED BY ** SELECT + FROW tmp INTO OUTFILE “y.160" FIELDS ESCAPED BY ** LINES TERMINATED BY ** DELETE FROM tep LOAD DATA INFILE "/.other_cb/x. ISM" INTO TABLE tmp FIELDS ESCAPED SY ** LINES TERMINATED BY ** SELECT * FROM tap INTO OUTFILE *y. 15H" FIELDS ESCAPED BY ** LINES TERMINATED BY ** ‘© in acest moment, aveFi un nou tabel y, care include continucul tabelului oth iar dumnecvoastri aveyi acces total la acesta. Pentru a evita si figiatacat fn acest mod, stabiliti permisiunile asupra confinutului eata- logului dumneavoastri de date in conformitate cu instrucfiunile din secyiunes jSecuritate interni: securizarea accesului la catalogul de date*. De asemenea, puteyi folosi optiunea --skip-show-databese atunci cind pornifi serverul, pentru a limite folosirea instuctiunilor SHOW DATABASES si SHOW TABLES de citre utilizarori pentru baze de date la care acegtia nu au acces. Astfel, utilizatorii nu mai pot afla despre existenta ‘nor baze de date, respectiv tabele, a care nu trebuie s8 aibi acces. Pivilegiul ALTER poate fi folosit in moduri pe care nu le imaginai. SX presupnem Govim es udizatfal goer) st pout abn accel ls abe darn ln aben8, Une ator cu privilepiul LvER vi poate derurna intentia folosind ALTER TABLE pentru a redenumi tazel2 cu numele tabelt Fiqiatent Ja privilegiul G2ANT. Doi utilzatori cu privie privilegiul eran, igi pot miri reciproc puterea drepturilor de acces ale fieciruia, abo, diferie, care dispun ambii de Configurarea utilizatorilor fara instructiunea GRANT Daci dispunti deo versiune a sistemalui MySQL anterfoari versiunii 3.22.11, nu pueti folostinstructiunile GRANT sau REVOKE pentru a configura uilizatori si prvilegi de acces, dar puteji aduce modificiri ia mod direct conyinutului tabelelor de acordare. © bunt parte din aceste operagil sunt mai simple daci inyelegoyi cum acfioneazit instructiunes Grant pentru a modifica tabelele de acordare. Apoi, pute proceda in acelasi mod prin 484 ParteaallkaAdminisrarea sistemului MySQL jterca shanvali ainstrucriunilor INSERT, (Instrucyiunea INSERT poate fi dizgraioasi gi dificil de introdus corect, dar aceasta este o alt problema. ,Urifenia" instructiunii INSERT este de fapt, unul dintre motivele pentru care instrucyiunea GRANT este cu mult ‘mai simplu de utilizat) Cand emiteti o,instructiune GRANT, specificafi un nume de utiizator si un nume de ga7di, eventual o paroli. Pentru utilizaor este ereatio intrare in tabelul user, ia aceste valori sunt inregistrate in coloanele User, Host gi Password ale intririi, Daca specificayi privilegi globale in instructiunea GRANT, aceste prvilegi sunt inregisrate in coloanele cu privilegi ale inesici, Trebuie sifigiatene la faprul cl instructiunea GRANT cripteazi paro~ Ja automat, dar INSERT mu exccuts accastk operat; va trebui si folosigi functia PASS- WoRO() pentru a cripta parolele in instructiunile dumneavoastrd INSERT. Daci ayi specificat privilegii a nivel de bazi de date, numele de utilizator si numele gazdei sunt inregistrate in coloanele User si Host ale unc! intriri din tabelul ab, Baza de date pentru care afi acordat privilegi este inregistrati in coloana bb, iar privilegile pe care le-ari acordat sunt inregistrate in coloanele pentru privilegi Pentru privilegile la nivel de tabel, respectiv la nivel de coloand, efecele sunt asemini- toare. Sunt create intriti in tabelele ratles_oriy si coluans_priv pentra a inregistra sumele de utilizatos, numele gazdei si baza de date, precum si tabelul, respectiv tabelul coloane, daca este necesar Privilegile acordate sunt inregistrate tn coloana cu privilegi. Dact ati retinut descrierea anterioari, trebuie si puteti executa operatile efecruate de instructiunea GRANT chiar in absenga acesteia. Rejineti ci, atunci cind modifica in mod direct abelele de acordare, va trebui si indicai serveruluisile reincarce, deoarece in caz contrar acesta nu va sesiza modificivile, Puteti forts o reincircare executind © comand nysqladnin flush-privileges sau aysaladsin reload. Daci omitefi acest lueru, vi veti intrebs de ce serveral nu se comporta age cur orf Urmitoarea instructiune GRANT creeazi un super-utilizator dotat cu toate privilegile, inclusiv capacitatea de a acorda privilegiialtorusilizatori ‘GRANT ALL ON *.* TO elonaéloceihost IDENTIFIED BY “oa WITH GRANT OPTION Instructiunea va ereao intrare pentru elena@locelnost in tabelul user si va activa toate privilegile din tabelul respectiv, deosrece acolo sunt stocate privilegile de super uti lizator (globale). Pentru a face acelasi lucru cu INSERT, instrucfiunea este: INSEAT INTO user VALUES (‘localhost "elena* PASSHOAD(“cafea”)), ye Rasa ha ays Wayetcy Rey cesta cyan) Asta este 0 instructiune INSEAT uritd de-a binelea! Puteri chiar descoperi ci nu functio- neazi, in functie de versiunea dumneavoastri a sistemului MySQL. Poate cd structura tabelelor de acordare s-a modifcat cu 0 anummitk ocazie si s-ar putea si nu aveyi 14 coloane cu privilegii in tabelul dumneavoastrd user. Folosigi SHO" COLUINS pentru a afla care sunt coloanele cu privilegié pe eare le contine fiecare tabel de acordare si modificayi ‘n consecingl instrucriunile dumneavoastr3 INSERT. Urmitoarea instructiune GRANT mai creezzi un utilizator eu statut de super-utlizator, dar numai pentru un singur privilegi GRANT RELOAD GN *,* Flush@localhost IDENTIFIED BY *flushpass* Capitolul 12 Seouritate 485 Poste vi reamintipi de aceasti instructiune din capitolul 11, eind am creat utilizatorul ‘lush, Instructiunes INSERT pentru acest exemplu este ceva mai simpli deeét pentru exem- plu anterior, ste mai simplu si se mentioneze numele coloanelor sisi se specifice singu- +a coloani cu privilegii. Toate celelaite coloane vor primi in mod prestailitvaloarea "W": INSEAT 2K70 user (Host User, Password, Reload. priv) \VALUES(*Jocalhost* ,*Flush* ,PASSHORD(*flushpass")"Y") Privilepile la nivel de baz de date sunt acordatefolosind o clauzi ON nune_baza_de.. fn loc den +." GRANT ALL ON sémp_do.* TO boris@localnost IDENTIFIED BY "rubin* ‘Aceste privilegii nu sunt globale, deci nu vor fi stocate in tabelul user. Trebuie si creim @ inte in abel user ee ‘tide utilizaroral sf se poatl conecta), dar trebule si mai creim o intrare gi in tabelul 6, pentru a invegistra privilege la nivel de bazd de dace: INSERT INTO user (Host User, Password) VALUES! "Locadhest","boris* ,PASSWORD( rubsn*)) INSERT INTO ab VALUES(*Localhost' ,"sanp_db", "boris", FE SY YE TEES HES AYES YD Coloana cu valoarea *N* este cea afecenti privilegivlui RANT; pentru o instructiune GaN la nivel de biz’ de date insoyii de optiunea WITH GRANT OPTION, valoarea din aces coloani ar fi fost *Y". : Pentru a cont gua prvilegi la nivel de tabel sau la nivel de coloani,folosiyinstrucyioni INSET pentru tabelele tables_priv sau columns_priv. Desigus, daci nu dispunesi de instrucsiunea SRANT, nt veti beneficia nici de aceste tabele, deoarece toate au apirut to MySQL in aelas timp. Daci aves tabelele si dor ste manipulasi manval dintrun an mit moti etineyi cl nu se activeazi prvilegilefolosind coloane individuale. Pentru aceasta configurai fie coloana tables_priv. c fo valoare Se aleituici din privilegile pe care dorg ole activa. De exempla, pent a active eile INSERT si SELECT pentra un tabel, vet atribui in coloana Tabte_priv o valoare ‘Select, Insert” ip intrarearelevanté din tabelul tables. priv. Dac doriti sf modificati privilegile pentru un utiizator al clrui cont MySQL exist! Gua, folong urbe in locde eernneas fapt este valabilindiferent dacd adugeri sat revocati priviegi, Pentru a elimina complet un utlizatoy, folosigi DELETE pentru 4 eli ‘mina intririle aferente utlizatorului din fiecare tabel de acordare, Daca preferazi si mu emiteyi interogéri pentru a modifica tabelele de acordare in, moc direct, pute; examina scripturile nysalaccess si aysql_setpermissions care sun incluse in distributia MySQL. 200%, bie_priv, fie coloana colunns_priv .Colunn_priv Ie” 486 Parteaa Ill-a Administrarea sistemului MySQL 0 enigma cu privilegii (Partea a II-a) fn capitolul 11, in sectiunea .O enigma cu privilegi (Partea I)*, am examinat o situatie [de acordare a privilegilor in care privilegile nu aveau efectul scontat. Pentru 2 ne eaminti rapid contextul respectiv, 0 problem’ care se produce frecvent cu instalisile oj ale sistemului MySQL este aceea ci administratorul doreste 5% adauge 0 intrare [pentru un utilizator, inrare care si-i permita aceseuia si se conecteze de la mai multe gazde. Modalitatea evident de a proceda consti in utilizarea unui specificator al Jaumelui gazdei care confine caracterul de inlocuire %, astfel tncdt administratorul ereeazi un utiizator folosind o instructiune care seamini cu aceasta: GRANT ALL ON samp_db.* TO frede\.snake.net IDENTIFIED BY “cécao" Se ivdmpli ex fred abi un con pe gazda serveru, det elinceart st se conecteze % mysql -u fred -peacto samp_db ERROR 1045: Access denied for user: ‘fred@locathost' (Using password: YES) [De ce? Pentru a ingelege ce se intimpli, trebuie si examin3m atie modul in care nysqi_instal1_ob configureazi tabelele de acordare inpile, cit si modul in care serverul foloseste intirile din tabelul user pentru a stabili echivalenge cu parametrii conexiunilor client. Cand vi initializati bazcle de date prin rularea programului nysal_instalt_ob, acesta creeazd inti in tabelul user eu valori in coloana User i Hast astfel ost User Lovalnost root | Bit-viper-snake.net root ‘ocaihos Bitevipe".snake.netroot Primele doud intriti permit utilizatorului root si se conecteze la gazda localé speci- ficind fie tocatnost, fie numele gazdei. Celelalte doua permit stabliea unor conexiuni anonime de la gaéda local. La adfugarea intrieii pentru utilizatorul tred, tabelul va Jcongine urmitosrele inteicis tiost ser Locainost root root free | Cind serverul porneste,citegte intitle si le sortearS (mai itil ta funeyie de gands, poi in functie de uilizatora! gazde),incepind dela valorle mai specifice si erminind |excele mai generale Capitolul 12 Securiste 48" Host “Tvser Locainost root | Iocalhost pit-siper.snake.net root Pit-viper-snake.net A.sneke.netroot trea Cele doui intriri cu locstnost sunt sortate aur, ir apoi inerarea pentru root est inserat® prima, deoarece este mai specified decit valoares vidi. Intririle cu pit Viper. snate net sunt sortate alituri int-un mod similar. Toate aceste intriri au valor literale in coloana Host, far% caractere de inlocuir, deci toate vor fi soreate anterio intriit pentru utlizatorel ted, caze foloseste un caracter de inlocuie. In pariculay inerivile pentru utilizatori anonimi aw priositate fapé de intrarea utiizatorului fred i ordinea de sortare Rentals ace srnd cin tregincearc se coneceze dela sazialocl va re intrisile cu nume de utilizator vid este echivalenté cu parametrii de conexiun inwarit respective este vidi, deoarece wtlizatori enonimi presabillt me au parol: Deoarece “red a specifica o parolé arunci cind s-a conectat, a apirut o neconcordany {ntre parole si conexiunca a eyuat. . ‘Aici wrebule retinut ci, desi este foarte convenabils wilizarea caracterelor de inloovit entra a specifica gazdele de la care se pot conecta utilizatori, puteyi avea probleme conexiunile de la gazda local, atitatienp cit List in tabelul user intratile aferente vt lizatorilor anonimi. —_ fin genersh vi recomand si stergeti intririle pentru utilizatorii anonimi. Veti avea ag mai usoari: hysql DELETE FROM user WHERE User: Dack doris sifpi mai concret, sterget toate intrirleaferente utilizatorilor anonies di | celelalte tabele de acordare. Tabelele care confin coloane user sunt db, tables_priv coluans_riv | ea in accastésegtiune a abordat o snumitk sinaie, dar contine o le Enigma p-ezenatd fn accastl setiv ; com este de doit, examina abel de acordare, pent 2 vedeadack exist reo tra care i canfind in colana Host valos care un caracter mal specific deci inrarea als ext utliatorl in chestune scare vor corespunde parametilos conesiunl solicits de acel welizator. Dac aceasta ste sivai, ay ist expliatia probleme, Poae cls necesat sifii mai concret in ceea ce privesteintrarea aferentd uilizatorului (sau si ad io alckintrare, pentru a acoperi situatia eu un caracter mai particular). CAPITOLUL 13 fntretinerea si repararea bazelor de date fner-un model ideal, MySQL ruleazi firi probleme incepind cu momentul in care # instalafi. Dar uneosi se produc si probleme, dintr-o varietate de motive, dela cideri de tensiune gi defecriuni ale componentelor hardware $i pand la o inchidere in conditi inadecvate a serverului MySQL (cum ar fi oprirea executiei acestuia folosind comanda ki1 -9 sau cind calculatorul suferi 0 cldere). Circumstange precum acestea, din care multe depigese posibilitatea dumneavoastré de control, pot avea ca rezultat deveriorati ale tabelelor din bazele de date, cauzate in mod caracteristc de scrier! incomplete care se produc in cursul modificrii unui tabel. ‘Acest capitol se concentreazi asupra derectiri i rezolvisii problemelor care pot apirea la talele dumneaveass indfrene de modul in er se produc aceste probleme, Pentru verifcarea si repararea tabelelos, cei mai buni prieteni ai administratorului MySQL sunt utltarelemyisanenk si isarchk. Aceste doul programe dispun de numeroase caractersti Deja am discutat despre modul de utilizare a acestora pentru efectuares analizei distribusie! cheilor de index, precum si pentru dezactivarea si reactivarea indexvlui in capitolul 4, ~Optimizarea interogirilor". De asemenes, le puteyi folosi pentru verificarea tabelelor si ‘eparareeacelora care prezints probleme, fap care vi permite si remediat| pagubeleinainte ca acestea si se agraveze, ducind chiar la imposiblitatea de uilizare a tabelelor. Pentru o iss complet a optiunilor acceptate de ayisanchk gi isanchk, consultayi Anexa E, wReferingi de programe MySQL“. Pentru informagii suplimentare, consultafi capitolul ‘lntretinerea unei installa sistemului MySQL* din manualul de referingi MySQL. Verificarea si remedierea tabelelor din bazele de date Procedura general pentru devectarea pagubelor aduse unui tabel si pentru remedierea acestora este urmitoarea: 4. Verificagi tabelul pentru a detecta eventualele erori. Daci tabelul nu prezined erori, ati verminat. In exz contray, trebuie si-l reparati. 2, Executafi copii ale figierelor din tabel inainte de a incepe reparatile, pentru orice eventualitate, a 5. Incercai sk reparaitabell 4. Daci operagia de reparare esues24, restauray tabelul pornind de lacopiile de sigurany ale bari de date s dela jurnalele de acnalizare. eles Capitolul 13 Intretinerea sireperarea bazelor de date 489 Etapa finali a procedurii prezentate anterior presupune cd afi efectuat copii de sigurants ale bazei de date si c3 ai activat caracteristica de consemnare in jurnalele de actualizare. Dac nu este aga, atunci ducesi o existent periculoast, Citi capitolul 11, ,Administra~ rea generali a dstemulut MySQL", pentru a afla modul in care putes folosi nysalduen si modul de activare a consemairii in urnal. Nu dorigi sé va aflayi vreodatS in situayia de 2 pierce un tabel £irk posibilitatea de a- recupera, flindcd v-a fost lene 8X executati copit de siguranti. fnainte de a folosi mpisanchi sau Aseachk pentru a verifiea sau repara tabele, este nect~ sark satisfacerea unor cerinte preliminasi: '# Instituiti proceduri de executaresistematicd a copiilor de siguranya a bazelor de date si activagi consemnarea in jurnalele de actualizare, in cazul in care slul devine gi mai ru siun tabel ese atit de deteriora, int mu nisi poate fi reparat. N-am,mai spus asta? «© Parcutgeti in rotalitateaceastlsecgiune inaince de a incerea vreuna dintre procedurile descrise. In particular, nw trebuie si folosigi instructiunile prezentate aici inainte de a Fi citt sectiunes ,Evitarea interacriunilor cu serverul MySQL". Secgiunea respectiva trated despre problemele care apar in cazal ‘n care serarul flozepte un tbel in acelag timp in care dumneavoaste3incercati si-i aplicafi tabelului proveduri de verifi- care sau reperare. De asemenea, secjiunea descrie modul de a preveni aparitia acestor probleme prin pistrarea serverului in stare de repaus in timp cs uerayi © Cand efecrungi verficarea sau repararea tabelelor, trebuie si fiti conectat sub contul folosit pentrs a rula nysald, deoarece averi nevoie de acces de tip citie gi seriere le fisierele abd. Sintaxa de invocare a utilitarelor myisamehk si isamchk Uniltarele MySQL nyisanchk gi Asanchk sunt foarte aseminitoare si se u acelasi mod in majoritatea cazurilor. Principala diferenyé dintre acestea consti in tipul de tabele pentru care este folosit fiecare utilicar. Pentru tabelcle MyISAM se foloseyte ryisanchk, iar pentru tabelele ISAM se foloseste isanchk. Se poate determina tipul for- imatului de stocare folosit de fiecate tabel in functie de extensia numelui de figier al fisierului index al abelului, Extensia *.vt" indicd un tabel MyISAM, in timp ce exten- sia *. 19H" ind.cl un tabel ISAM. Pentru a folos: oricare din acesteutiitae, indicat-i acestuia tabelele pe care doriti si le ‘verficagi sau le reparai,alituri de opfiunile care specific tipul operatiel care va fi efecruatic ‘% mylsanchkc optiuni nune_tabod ‘% Asamenk options nune_cabel ‘Un argument nune_tabel poate fi numele unui tabel sau numele figierului index al unui tabel. Daed specifica mai multe tabele, putey folosi un model de nuume de fisier pencra a selecta toate fisierele relevante dintr-un catalog: ‘ ayisanchk optiuni * mvt % Asanchk optiuni 18M 490 Partea a la Administrarea sistemului MySQL ‘Nu vetidistruge un tabel indicdnd verificarea acestuia de citre un alt program deett cel adecvat, dar programul nu va face nimic alwceva deci sf emici un mesa} de avertisment. De exemplu, prima din urmitoarele instructiuni va verifica toate tabelele MyISAM din catalogul curent, in timp ce a doua nu va face decit si afigeze mesaje: 5 aydsanchk *.mvr % Asamehk +r Corect Gresit; tip de figier incorect ‘Nici unul dintre cele dout utiitare nu face presupuneri cu privire la amplasares tabele- lor; deci trebuie fie si rulati programele in catalogul care contine fisezele tabel, fie si specificaticalea de acces spre tabele. Accasta vi permite si copia fsierele abel int-un alt catalog si si utilizar copiile. Verificarea tabelelor tat eyisamehk cit si isanchk furnizeazi metode de verficare a tabelelor care vatiazi din punct de vedere al profanzimii cu care este examinat tabelul. De cegulé, metoda normal fs afin, Da veriees normal i aponst eon dar dimnenvossr spec ‘afi existenta unor pagube (poate deoarece interogirile par si nu functioneze in mod Adecvat, put dod st efcrua o veriicare mai aprofungacl Pentru a erecutso Ye care normal a unui tabel cu oricare din cele dows uriitare, invocayi-lefériniei o opyiune: ‘ myisanchk nune_tede? % deamehke nune_eabed Pentru a se executa 0 verficare amimuntit, folosii optiunea --extend-check. Aceasti opfiune poate fi foarte lenti, dar executi o verificare extrem de atentis pentru fiecare {oregistrare din figeral de date al tabelului, este verifcati chia ssociat§ pentru fecare index din fisicrul index, pentru a exista siguranga c3 indick ntr-adevar spre inregistrarea adecvati. nyisanchk mai are o optiune intermediari, i anume --mediua-check, are exe- cut o verificare mai puyin aprofundata decit verificarea amanungitd, dar mai rapidi. decat aceasta, . a “ pe Dacia o verficare eu opfiunea --oxtend-check nu sunt semanalae eros, putet fi sigur cf tabelil duimneavonsed nu are nil o problemd. Dac tot mai aver probleme cu tabelul, cauza trebuie sa fic in alta parte, Reexaminati toate interogarile care par si deter- rine rezultate problematice, pentru a verfica dact sunt serise coreet. Daci suntesi de plrere ei problema poate veni din partea serverului MySQL, completayi un rapore privind hibele sau erecegi la 0 versiune mai recent Daci myisanchk sau isanchk raporteazi existenta unor efori in tabel, trebuie si le reparaji folosind instructiunile din sectiunea urmétoare. Repararea tabelelor Repararea tabelelor este 0 treabi frit, mai ales dasorité faptuluic& detalile au tendiota de a fi foarte specificefiecirui incident in parte. Cu toate acestea, exist indrumici gi pro- ceduri de ordin general pe care le puter! respecta pentra a vi mod semnificativ sanscle de a putea repara tabelele. | r | i Ccapitolul 13 Invefinerea gi ropararea bazelor de date 494 fn general, puted incepe cu metoda cea mai rapid de reparare, pentru a vedes saci astel pute remain pagubrle, Dack descoperi ck acasti metodd mu ese sufcent pute sjunge pind la metode mai aprofundate (dar mal lent) pink cind pagubs fom erediati au pin eind au mai putey folosi metode gi mai aprofundzte. (In practei, majoritates problemlor pot fi remediate fd a se trece la moduri de reparare mai aprofundate gi mat nce.) Dacs tatelul nu poate fi reparat, tunci restaurai-l din copiile cumaeavoastré' de sigurangi Instractiunile pentru refacere tabelelorfolosind fisierele copie de siguransi st jurnalele de actualizare se gisese in capitolul 11. Efectuarea regarafiei standard a unui tabel era roars wn abel prcogemitonele ape . ncercti si emediattabeu!folosind opfiunea --recover, dar foloi i opfiunes --ausek petra i nowen lacy abel aun in nei de comsinutl feral index. Ast Eabelol va fi eparat fr nici ointeractune cu fisieral de date: ‘ nytsanchk --recover =-quick nume_tabel fe teanchk --recover =-quiek fune_tebel - acd problenele persist incercefi comanda prezentaiin etapa anterioar®, dar o Fae ence pens peri vlitarlormrssanck s sanonk sf mouice figerol de dace: 4 mylsanctk ~-recover nune_tabe! 4 Hsamehk --rezover cune_tabel ie hou acd aceasti metod nu reuseste, incezeapi modul dé reparare --safe-recover, Aces * ee wma ler 7 Tnodul de relacere “awuie, dar este capabil de a remedia uncle probleme pe care modul --reeover au le poste rezolva ‘ myisanchk --safe-recover nune_tabe! © Asancnk ‘ecover nune_tabel ; Dack uiliuarele nyisanchk sau doancnk se opzesc in timpul oricireia din acest etape, eu vDamesa| de ecoare de forma "Oan't create new tenp fale: nuse_fisier* (nu poate reer un nov ‘sier temporar: name figir), rebuie si repetagi comanda si sf addugayt Gonanes force, petra a fora eliminarea fsierulu semporat, Probable acesta = fost Shirat” cela o incereate de reparace anterionss. dac omiceti Copiatitobeleleinainte de ale repara ee ee seer estate asus cu Coe sero je foeroor taker everulialea in care ble saa de sub cna Este pulp ae ad fondle og cova, ar doc ce xbmpl, pul eno 0U8 cople abel dn feee topiat .tehneaea © ata mend de lace. Ce este de ficut ednd metoda standard de reparare a tabelelor nu reuseste act procedra de repacare stadard ima reusesteskrepare tabell, este posiil ca fisieral Jndex ed Fipseasch sau si fie imposibil de reparat. De asemenea, este posbil desi purin probabil ca ‘iierl de descrieve a tabelului sie ineistent in ambelecazuri ve teu eefalocultifgiereleafecate, dup care incereayi din nou procedura ce reparare standa 492 Partoa alka Administrarea sistemului MySQL Pentru a regenera fisierul index, folosiqi urmitoarea proceduri: 1, Deplasai-va la catalogul de baze de date care contine tabelul deteriora. 2. Deplasafigierul de date al tabeluluitntr-un loc sigur. 3.Invocati nyead gi creat un now tabel vid i tabel vid prin executarea urmitoarelinstructiun, care folosestefisierul de descriere a tbelului nune_tabol. re pentru a regenera nou ice de date respectiv nou! fisier index, pornind de la zero: . rnysql DELETE FROW nune_tabe!; 4, Piristi programul mysql gi deplasatifiserul de date original tnapoi is baze de date, inlocuind noul figier de date vid pe care. ra canna condone de Z Incercasi din now si reparatitabelul prin metoda standard. entra a reface fsierul de descriere a tabelula,restaurail i er ref feral de descr a bs researc esis sot ec noe procedure de eprare standard. Das iawrun moti nu dispuneyi de o copie de sigurany, dar cunoastet instrucyiunea Gee felon pena treatable al ney es epars el : Dept Ia catalogul de baze de date eare contine rabelil deteriorat. >. Deplasay figierul de date al rabeluluiinte-un loc sigur. Deplasaisifsierul index, dack origi s¥ incercatisi-folositi. fee Dee ‘lealindes deck 3 Ion programe mst emi iracoe REATE TAKE ae recast tabelul. . Picisii prograrmal nysal si deplasatifiperul de dave orginal inapot in catalogal de index in etapa 2, mutati fisierul index inapoi in catalogul de baze de date. . 5. Incercai din nou si reparapi tabelul prin metoda standard. Evitarea interactiunilor cu serverul MySQL. Cling rulayi un wilicar de veriicare-reparare a tabeleios, au este de Sec pe earpel One perme eip ae oe Ste Bia Ieee gxambel programe si sein abe drm este ma ine nk ac on program see ir gle sere, Programul care cyte poate fi deruat dich tbe este tmodificat in acelagi timp de cre eellale program. Pures garanta in Pa na oricStelinteraciuni inure server gi aySsanahk sau tsanchk dack oes sever en fun et eon een et de ies) In esa ce ives ea completa din functiune a serverclui, deoarece astfel devin indisponi- bile gi bazele de date gi tabelele fir defectiun, Procedure ele aes seas “vor jt viernes dlinere server si myisonchk si isamehk. Un server dispune de doui categori de blocii. Blocarea interai se foloseste pentru 2 pete nverogri SELECT a unui clint decir nerogars Poste a wou ale let: De ssemenea, serverl foloseste blocatea externi (blocare fa nivelulsistemului de figiere) pentru prevent modificarea fisierelor tabel de citre alte programe in timp peas fend un foie de he seve Ts od norma seve esee Wace ni pentru a coopera cu nyisanchk si isarché in timpul operatilor de verificare a Gapitolul 13 Intretinerea s repararea bazelor de date 493 tabelelor. Toray, blocarea extern este dezactivati pe unele sisteme, deosrece ne Eincyonesz! in tod fibil. Procédura pe care srebuie si alegeri pene rulares pro” tiactelor ayaseecrk si isanchk depinde de ueizarea sau na blot externe de See ae Back servecul nu folosese blacaren extern’, trebuie si folasigi un protocol de blocare intern’. Blocarea extesni este dezactivatd dact serverul ruleaz cu opsiunea --skip-20eksn@ Aaeeatyoptlune te presabl pe unee isteme, precurn Linux, Pei determina ct aoe reane a capabil sf foloseasek blocarea exter prin rulares comet sertiadean variables. Verifiafivaloaea varablel skip-Locking #i procedai dus cum urmeazk a Duck watiabilagkip-Locking este dezactivat blovares extern este activath Pure ao aren cele dou ultare pentru verficareatabelelor. Server s titer ‘ee Soopera in-vederea accetulu la tabele. Tori, uebuie si evacuyi zona cache Pon, yee aoe yeorul comenzii aystiadnin flush-tables inainte de a rula vreumal Tr are, Pentru repararea tabelelor, teebuie si folositi prorocolul de blocare pen tru reparares tabelelox. Dect vavabilaskip-Locking este actvati, blocarea extern este dezactivai si server aa pi dack ayssanchi sa Season verifies separa un fabel, Cl mal indicat os 3b opm serverul Daca insstay sk ati serverol in fanctune, weebuie 68 V8 21655 Sh opr eT uu obtine acces a tabel i imp ce dumneavoasrafolosiftabelul. Ne Ghai foloss un protocol de Blocare adecvat, petra a indica server sf lass tabelul in pace gi si blocheze accesul clienyilot la tabel. Protecoalele de nlocare desecse ac folosese mecanisml intern de blocare al server pentru wl fmpiedica pe acesta <8 obyin8 acceul la un tabel in imp €o dumneavoastr’ Pree ia abel respectiv cu ayssanchk sau Asanenk, Ideea general este 8 nvosat eeraH emieo instruciune LOOK TABLE pentra tabell pe care dog il veificat 48 TER fatag Aged, ou program nyse in ire de inaceivitate (ack rulear4 dar face Seer ud cabell Blocat), ula aySsanchk sau isanehk. Dupa ce absst wlltars seat nchelatexcuta, pote even a sesunea programulu: myaat i ancl blocarea, pertra a indica serverului i poate folosi din now tabelul re cocealele de blocare pentru verficare si reparar sunt oarecum diferte, Pentru vr Paes bat obpne omar 0 blocare Debt itive: In acest. caz, citi tabelul dar fat head dec, putes permite gator cen sil cieasc, Blocarea penara cise Bu ruficientd pentru a-i impiedica pe alti clienfi si modifice tabelul, Pentru reparers a att eipeurao blocare entra serire, cu scope de 2 impiedica pe al cen "x modifice tabelul in timp ce dumneavoustei Iucrati la tabel. Protocoalele de blocare folosesc instructiunile LOck TABLE gi UNLOCK TABLE penkrn & seb respecdv pentra anula blockile, De asemenes, protocoalee folosess Ft CABLES peneru a evacia pe disc toate mosificrile suspendate pi pent & redeschide rey Hear ceases a fost modifica: de un utliar de reparare a tabelulul.Trebwic crore Gebaceinstrucfiunile LOOK, FLUSH si UNLOCK in cadral une! singure sesion! mySais cece loca un exbel i spoiparisigtprogramlmysa,blocarea va fi ancl gi slaren oo elor ay-sanch si isancnk nu se va dstiqura in condi de siguranyil 494 —Partea.alika Administrares sistemului MySQL Provedurile de blocare se pot desfiura cel mai usor daca pastrati deschise doua ferestre: una pentru rularea programmului nysq2 si alta pentru tularea programelor nyisanchk sau Asaachk, ceca ce va permite si comutafi cu usuringé de la un program la aleal. Dac nu, Toca intrun medi ou frestrereuie sl uypend if clu exectn programs: Jui nysai folosind funcrionalicirile de control al sarcnilor caracterstce interpretoralui isin orl mysnnei om Lanai, Insoucleumftonc prexne comenzle pentru nyisanenk si isanchk; folositicle pe cele care sunt adecvate pentru tabelul sau tabelele la care ucrasi, ae as Blocarea unui tabel in vederea operafiilor de verificare Aceasta proceduri se foloscste numai pentru verificarea unui tabel, nu pentra repararea acestuia. In fereastra 1, invocatinysal i emiteyi urmitoarele instructiuni: "© mysql nune_ba gate mysql> LOCK TABLE nune_tabe2 READ; mysql> FLUSH TABLES; Blocarea impiedicd pe alti client si scri in tabel si si modifice tabetul in timp ce dum- ‘neavoastri il verificari. Instructiunea FLUSH determing serverul si inchidfigierele tabel, ceea ce determin evaciarea tuturor modifickrilor care mai pot exista fn cache Cu programul nysal inactx, cormutati in fereastra 2 si verificat tabelul myisanchk mune tebe? ‘ Asanehk nune_tabel (Cand ayisanchk sau isanonk s-ainchelat execuya, revenxi la sesiunea nyegh in fereastra 1 si anulati blocarea tabelului: - snyoel> UNLODK. TABLES Daci myisanchk sau dsanchk raporteaziidentificarea unei probleme cu tabelul, va trebui si electuayirepararea tabelului Blocarea unui tabel in vederea operafiilor de reparare Procedura de blocare pentru repararea unui tabel este simiari cu procedura pentru veri~ ficaen acest, cu doud diferente Mai inti tebuies obineiobloeare pena serie, nie una pentru citire. Veti modifies tbelul, deci nu pureti permite sub nici o forma clientilor acces la acesta. In al doilea rind, trebuie si emiteri o instrucgiune FLUSH ‘TABLES dupa efectuarea reparatilor, deoarece nyisanchk si isancnk construiese un now fisier index, dar serverul nu va remarca acest lucru decat dack evacuati din now 20na cache pentru tabele. Pentru a executa aceasti proceduri, invocati mysql in fereastra { gi cemitefi urmatoaree instructiuni: § mysql nune_baza_de_date fnysal> LOCK TABLE nune_tabe? WATE: nysal> FLUSH TABLES; Cu programm nysa2 inacty, facet copit ale figierelortabel, dak nu ayi provedat deja asl, poi rulayi nyisanchk sau isan ‘ep rune_tabel.* (unfait foatatog ‘ myisanchk --recover rune_tabel dsanehk Capitolul 43 Intretinerea si repararea bazelor de date © 495 Opyiunea --recover nu are decit un caracterilustrativ. Optiunile particulare pe care le alegeti vor dezinde de tipul de reparayie pe care il executayi, Dupi ce programele nydsanchk sau isanchk si-au incheiat executa, revenii la sesiunea nysql din fereastra 1, fevacuati din nou zona de memorie cache pentru tabele si anulagi blocarea tabelului: ‘mysql> FLUSH TABLES; nysal> UNLOGK TABLE; Marirea vitezet de lucru a programelor myisamchk si isamchk Rularea programelor myasamenk si Asanchk poate necesita un timp indelungat, mai ales -daci lucrati cu un tabel mare sau folosisi una dintre metodele mai amanuntite de verifi- care sau de resarare Pate mi vitezn de cra a acestor programe indicindule st foloseasca o cantitate mai mare de memorie atunci cind ruleaz’. Reducerea impolui de inactvitate o serverolt © ait messi despise sbi ace tebl unde uel de ea col ee {area els n tr ctoqu de dt Tol prodena cy reacunea nu xe erin foros Venom cntrcve sh impede servers obi aozesu Ta abel (ever cat rosie! np co durmeaasta ivy cops. Tu one eno mets de edie pu e Tretat a seul pot finorsand pen cumneeoes, daca suerte na scale dist saver dh towne, Oph ener pry o aout ptoad de np, acl cn copia sere {Sel do car sot nel tn a cal, up creep sever Planuri de vitor pentru ny isamchic Se inientoneazsca incl de veers greparare a abellr de care spun ital mysanchk 8 fe usonale h sone nian enum mement cin dezrotaeasorel do versio MySOL.3.2, Cid est luca seve tno, vrfearea 9 reparareatabellor vor veri mut mal snl, dedarece vor mal pata problmel egte ce traci sere cu progamul ny isanchk Do asomnee, vel pia cere sever 8 erie ibs apie, dec nu va necesara saben ror comene speck oe ar ums fe exec a Incdrcara ster de oper nant de pores Servet Tou acest sua este vai pen abl SAM, dec, tun nd sever va Cet cu tncfnalle de vertcare si reparae, vag recomanda sB vel in vedere convrsi able SSaNin ab AYISAM, Exiga de el MyOQLl nolo version, pont a ved ooh lca a bc Tn acest omer, Pl carve un bel flosndoinsbucane ALTER. TABLE’, [ALTER TABLE nune_cebel TYPE = MVaSAM Ambele utilitere dispun de numerosi parametri de operare care pot fi configurati. Cele ‘mai importante din aceste variabile controleazi dimensiunile bufterelor folosite de citre programe: Variabia key_butte ‘Semnifesio ‘imeselunea burl folost perry stocereabiocuor de index Dimensiunea buffer olost pentru operate de ei Dimensiunea buffer folost pet sotare Dimanshinea buffer olost pei operatile de sire “size read_putter size sort_buffer size write_butfer_size 496 —Parteaa Ilka _Administrarea sistemului MySQL. Peneru‘a ala valorile folosite in mod prestabilit de fiecare program pentru aceste varia~ bile, rulapi programul cu opriunea ~-help. Pentru a specifica o alti valoare, folosti -set- variable variebile-veloare sau -0 vertabilervaloare in linia de comandi, Puteyi prescurta numele variabilelor sub forma key, read, sort si write. De exempta, pentru a indica programului nyisanchk si foloseascl un butfer de sortare de 16MB gi buffere de citire respect scriere, de IMB, invocati programul astel ‘ mydsanchk -0 sort=16X -0 read=t -0 writesth . Variabila sort_butter_size este folositi numai cu opyiunea recover (nu cu opfiunea --safe-recover), caz in care variabila key buffer nu este folosit. Planificarea intretinerii preventive ‘Tiebuie a sve in vedere lies une panics operailr de insane prven- {Hvi, pentru a contribui la detecrarea automati a problemelor, atfel incat si puteti lua rmiisuri de remediere a acestora: r a 1! Executagisistematic copii de sigurani ale bazelor de date si activati caracteristia de ‘consemnare in jurnalele de actualizare. Nusi asa am mai spus-o? 2, Stabilisisistematic 0 verificare periodied a tabelelor. Prin verificarea tabelelor dumnea- vvoastrd, veti diminua posiblieacea de a fi obligat si vi folositi copille de siguranci, Aceastl operatie se poate execute eel mai simplu sub forma unci sarcini a utiicarulai tron, invocati in mod caractetstic din fiserul crontab al contuluifolosit pentru rularea serverului, De exemplu, dack rulai serverul ca utlzator sysalacx, atunci putefi stabil overificare periodici din fisierul crontab pentru mysaledn. Daci mu sii sifolosii cron, examinagi paginile aference din manualul UNIX folosind sceste comenzi ‘man cron % nan crontab 3. Verificai tabelele din bazele de date in timpul procedurii de incircare a sistemului de ‘operare,inainte de pornirea serverului.S-ar putea ca reincircarea sistemului de operare si aibé loc datoritd unei cideri anterioare a sistemului, In acest caz, este posibil ca tabelele din baza de date si fie deteriorate i rebuie verficate. Pentra a executa o verificare automati a tabelelos, puri scrie un script care comuti in catalog de dae al erveruii i ulcaa nyioanenk seasonk pe toate tabelle dn baa dumneavoastré de date. fn scripturile prezentate in expunerea urmitoare, von folosi ambele programe, Dac’ dispuneti numai de tabele MyISAM sau numai de tabele ISAM, avefi nevoie numai de umul din aceste programe gil putefi omite pe celalalt din scriptar. Atit ayisanchk, cit si tsamehk geneseazi dace de iesire in modul de verificare a tabelelos, pentru a vi informa care sunt tabelele po care le verifci, chiar dac3 nu exist nici un fl de probleme. Pentra intririle crontab, in mod normal este de dositca datele de iesire si fie suprimate, cu exceptia situagilor cind apar erori in tabele. (In mod caracteristic, sarcinile utiliarului cron genereazi un mesa) de popti daci vreo sarcina produce date de iesre, si ru existd prea multe motive si primifi mesaje pentru sarcini de verificare a tabelelor care ru gases nici o problemi.) Dack invocati orice utltar cu opfiunea ~silent, va genera date de iegire numai la aparitia problemelor. De asemenes, nyisenchk accepti o optiie fast, cae fi permite i omiti orice tabel cae nu a fost modifiat de la ultima verficare. Capitolul 13. Inttetinerea girepararea bazelor de date 497 ‘Un seriptsimplu, care verifici toate tabelcle din catalogul de date al serverului, se prezint? asfel (OATADIR tzebuie inlocuit cu o valoare adecvatd pentre sistemul dumneavoastra) #1 Peinssh ced DATADZA ryisancht --sslent - ssamchk --silent */*.18i (© potengialé problema a acestui serps este aceea c8, daci dispuneti de mumeroasetabele imodelele cu caractere de inlocuire */* V1 sau */*. TSM pot agasa interpretorul cu eros de genul prea multe argumente". Un script alternativ poate fi scris astfel (din nov fnlocuip OATADIR cu o valoare adecvaté pentru sistermul dumncavoastr’): #1 dinish dataair=0araDIe ind Sdatadir -nane °*.6YI" -print | xargs myisanchk ~-silent --fast find Sda:adir -nane **.19N" -print | xargs isanchk --silent Indiferent de forma de seript peatru care optat, voi presupune ci tl veyi denun check mysal_tebles, Nu uitat si modificeri modul,asfel inc seripel si fie executabi ‘Aoi, trebuie si invocag seriprul manual, pentru a verifica dact functioneazi corect: fast t 0/".INT y we enood ox chee 2 Gheck_tyegh tale, fn mod ideal, nu vor exista date de iesire. Dacd sistermul durmneavoaste’ mz accept blocare extern, este posiil ea serverul si modifice un tabe in timp ceil verificai. In acest caz, srig tal poate raporta probleme pentra tabele unde aceste probleme nu exist. Situayia nu este pre fericina, dar erve de preferatcazului invers, nd scriptul nu raporteaza probleme, dar aveste SS Deck cnamel Gomnervoane capa blocaree ener, acest problemi aap Sectiunile unnatoare prezintx modul de configurare a scriprului astfel incat acesta si f Seana sutomas de Cron ila pornrea sistemului In exemplele din aceste secjiun, v Sree srpol ste ina a extogel usr ers ayse dada ban. Va teu rodifeatcdea conform conigrai sstemuol dmnesvoattl Daci ralayi mai multe servere tn sistemul dumneavoastr, va trebui si modificati proc: dura astfel incdt si verificari tabelele din catalogul de date al fiecirui server. Puveri fac aceasta execatind copii diferite ale scriptului check mysql tables sau prin modificar: Scriptalui asl inedt 38 accepte un argument de linie de comands care si specifice eat. Togul de date pe care dori sil veificai Verificarea periodica a tabelelor cu ajutorul utilitarului cron Si presupunem c& dori si invocayi seripeul check_mysat_tabies din figierul crants pene unzaorul aysetage, Deshideysesiznes de Tuer sub coatulrespetiy poi cd {af figieral dumeavoastd crontab folosind aceasti comands % eronted -e [Aceasti comanda vi va duce intt-un editor de texte, in care va insera o copie a fisierul ‘erontab curent (care poate fi vid, dack mu api mai executat aceasti operatic in prealabi ‘Adiga la figier o linieeare se prezinté asta 0.3 * * 0 susr/users/mysqladn/bin/check_mysa}_tabiee /oqh_tables 498 Partea.ailka Administraree sistemului MySQL ‘Aceasté inteare indic8 utlitarului cron si ruleze comands fn fiecare duminid, la ora 3 dimineaya. Puteyi modifica ora sau planificarea dup dorinyé. Cotati in pagina de manual crontab pentru a determina formatulintriilor. Verificarea tabelelor la pornirea sistemului ack folosii un sistem de tip BSD gi ari adiugat comanda de pornire a serverului la fisieril /ete/rc.tocal sau la un echivalent al acescuia, puteti pur si simple invoca check_nysqi_tables din figierul respectiy inaince de a porni serverul Dack folosisi metoda de pornire earacteristicd sistemelor de tip System Y, care invocd ysal.server din unul din cataloagele /ete/re.d, procedura este ceva mai complex, Scriprurile de din acestecataloage trebuie si inteleagi argumentele start astfel incit si poatd intreprinde acriuni adecvate la pornirea, respectiv opriea si lui. Pentru a executa verificarea tabelelor, putem serie un script care invoct cheek nysq}, tables arunci cind argumencal este start gi care nu face nimic atunei cind argumentul este stop. SE denumim seriprul nysql check; aspectul siu este urmétorul 1 [banish stop, # Sa vaden cum an fost apelati. case *S1" in start} ‘echo -n. “Verifica tabelele Mysol: * Sf [x Jusr/users/aysqiadn/oin/check_sysai_tables }; then Jusefusers/nysqladn) bin/check_nysql_tables #8 stop) # nu face mimic ” Scho *Usene: $0 {startiston}* exit 1 exit 0 ‘Acum, pute instala nysql check folosind o procedur similar celei descise tn capitolul 11 peat instaarea seviptului nysal.server. Nu uitayi si atribuitiserpnului nyselcheck un numir de prefix inferior in catalogul la nivel de rulare, astfl incdt si ruleze inainte de rysa2 server. De exemplu, dack vi lepayi la nysa2 server ca 898nysq2 server din catalogul la nivel de eulae, vi puter lege la mysq2check ca S88nysql. check. Partea a WV. Anexe ‘A. Obtinerea i instalarea programelor B Referinta de tipuri de coloane C Referinfa de operatori si functit D Referinfa de sintaxa SQL E Referinta de programe MySQL F Referint’ APLC © Referinfé API Perl DBI 4. Referinta API PHP 1 Instrumente utile produse de terte parti J. Fumizori de servicii Internet ANEXA A Obtinerea si instalarea programelor ‘Aceastt anexi descrie modul de obyinere si initalare a programelor de care vetiavea nevoie pentru a rula MySQL gi programele coreiate create de terte pari descrise in aceasti carte, precum suportul pentru Perl DBI si SGLpm, PHP si Apache. De aseme- nea, este prezentat modal de obfinere a fiierelor asociate cu baza de date demonstrativa sanp_co folosita pe parcursul acestel cir. Scopul acestui capitol este de a aduna la un loc instructiunile de instalare pentru toate pachetele, nu de a inlocui instructiunile incluse in fiecare pachet. De fapt, vi recomand Si citi aceste instructiuni, Anexe de fayd furnizeaz§ instructiuni de ordin general care ar trebui si fie suficiente in majoritatea situasilor, dar fiecare distributie software confine gi instructiuni care vi ajutd si remediagi problemele in cazul epecului une pro- ceduri de instalare standard. De exemplu, manualul MySQL confine un capitol de mari dimensiuni dedicat procedueilor de instalare gi care include solupii pentru mumeroase probleme specificesistemului Selectarea programelor de instalat ‘Trebuie si instalayi MySQL daci mu ati procedat deja astfel, dar este necesar si instalat! smumai acele instrumente create de terte parti pe care dori si le utiliza: ‘© Daci dori st serie’ scripturi Perl care obtin acces la bazele de date MySQL, trebuie si instalagi suporcul MySQL. pentru programarea clienilor si modulele DBI. Dact intengionagi si scrieyi scripruri DBI care furnizeazi acces prin ‘Web la bazele dum- neavoastri de date, probabil ci veti dori si instalayi modulul CGL.pm gi veyi avea nevoie de un server Web. In acest can exe fost serverul Apache, drs pot ols si ale servere. # Daci dorigi si scriesi seripturi PHP, trebuie si instalasi suport de programare a clicalor si PHD. In mod normal, PHD ese flost pent atvtatea de seripting in Web, ceea ce inseamna ci mai aveti nevoie si de un server Web, Serverul Apache este folosit in aceasti carte deoarece Apache are suport modular pentru PHP. Aceasta Inseamnd_ ci puteti instala PHP ca parte incorporati a binarulvi umneavoastri Apache, Daei mu putes! modifica exemplarul dumneavoastr al serverului Apache (de exempla daci vi aflati pe o gazdi ISP si ISP controleaz3 Apache) sau dacé rulayiun alt server Web, puteri construi PHP ca program autonom si rulasi seriprusi PHP sub formi de seripruri CGI standard. Instalarea PHP ca modul Apache asiguri perfor- rianje mai bune decat rularea acestuia ca program autonom, ‘Anexa A Objinerea siinstalarea programelor. 501 Fisierele binare precompilate sunt disponibile pentru multe dintre pachevee de instalare. Pentru Linux sunt disponibile mai multe fgiere RPM, Daca preferagi & cornpilayi pro sgrame dela suri sau daci no este disponibili o distribute binark pentru platforma dum: peavoaste vet aves nevoie de ua compilator C (C++ pentru MySQL). Dezvoltatrii ‘MySQL recorrandi utiizarea compilatorului gee 2.95.1 sau a unei versiuni mai recente a acestuia pentru a construi MySQL. De asemenea, s¢ pot folosi i versiunile compila~ torului eges inzepand de la numral 1.03 Alte instrumente de care veri aves nevoie includ gunzip si tar (dact instalagi din figiere ‘tar comprimate), respectiv rpm (daca instalai din fisiere RPM). Obtinerea programelor Principalele pencre de distriburie pentrafiecare dintre pachetele de care vetiavea nevoie sunt prezentatsin tabelul urmator. Unele pachete pot fi obsinute din mat multe loca: Pachot Locate uysaL hep: //mwew-mysed cons feps//ttp.mysql.-con/pub/mysal/ et http: / awn. symboletone .org/technotogy/per/9B1/ hnetp:/ fwwy.sysql -con/Contrib/ PH ay. php.net Ftp: /ftp.php.net/ ‘apache nto: //wwtapache.orp/ ftp: //ftp.apache.org/ lpm http: /stein.cehl.ong/Mt sottware/CAt/ ack folosisi FTP pentru transferul figierelor, nu witati si le transferapi in mod binar, pentru a evita deteriorarea fisierelor. Exist multe iru oglind’ pentru MySQL. wnw.nysai.com se afl in Scandinavia, deci, acd alegeti ue sit oglinda care este mai apropiat de dumneavoastr, probabil c vey objine timp! de descircare thai bun. Siurle oglindX sunt mengionate la urmitoarea adres exp: //uwy.mysql.con/airrors.heml entra programele Petl, puteti folosi intotdeauna http: /opan.pert.org/ pencry a localiza siturie oglindi care contin modulele de care avepi nevoie. Selectarea versiunii care va fi instalaté Veesiunea unui pachet pe care i instalati depinde de necesitiile dumneavoastr: © Daci aveti nevoie de un maximum de stabiltae, probabil ci trebuie sift conservator fai folosis. cea mai recent versune stabild (nu beta) a unui pachet, Astel, beneticiag de cele mai recente caracteristci gi de cel mai mare numar de remedi ae hibelos, fara « ‘Yi expune programelor experimentale din versunea beta. ¢# Dack dori fi mereu la mol sau dack suntei propramator, poate dori si folosit cen ai recentd versiune beta. Desigus, dack aveyi nevoie in mod absolut de 0 carac terisicd exstench nual Intt-o verstune bets, nu avefi alti opsiune decit si folosiy versiunea respectvi 502 ParteaalV.a Anexe «© Pentru MySQL, distribuyile RPM ji binare incorporate sunt deseori construitefolosind indicatori de optimizare, care sunt mai buni deci ceea ce poate determina, de unul sin- gun, scriptul de configurare din distcibutia sursi, De asemenea, dezvoltatorii MySQL Construiese distribu folosind unele compilgtoare comerciale de optimizare, pentru a rari si mai mult viteza sistemului MySQL. In consecinsi, programele din aceste cate- gorii de distribugii pot rula mai rapid decit cele pe care le compilagi dumneavoastri. Daci dort si obtineyi un maximum de performant putes dori si incercayo distributie Incorporata. Sicarile Web pete fiecare pachetindick versiunile care constituie cele mai recente vari- ante stabile, precum si cele care reprezinté variante beta. De asemenea, aceste situri confin liste cu modificirle caracteristicilor pentru fiecare versiune in parte, pentru 2 vi ajata si decide care este varianta cea mai potrivitk pentru dummeavoastr Daci luctaficu distribugii RPM sau binare, despachetarea une distribu este echiva- lent cu instalarea acestela, deoarecefiscrele sunt despachetate in cataloagele unde dorigi si se giseased acestea. Dacd o distribusie instaleaza fiiere in cataloage protejate arunci trebuie si lucrati sub coneul root pentru a despacheta distribusia Pentru distribusile sursi, le puteyi despacheta intr-o regiune pe care o folosisi pentru compilare gi apoiinstalaji prograrmul in locarile de instalare, Pentru a efectua etapa de instalare este necesar si lucrati sub contul root, dar aceasticalitare nu este necesari pen- tru nic una dintre erapele de configurare sau compilare. nscrierea de corespondonti pentru a ob¥ng ajutor (nd ins un pact, 6 recomandl 5 v8 Tnsra! pe Ite de dsutlgeerlé pont pachets espe ase ct se pu pure ba prin aspsut ul, Dack lll variant bel, cate G9 rule va peat pant av ner in Bl. oespondend ascité program pent {cl mesa Sn seas st, pena fils cutet cu rpoarel pivid hele ou remecile ape Decd nav inst Into Et do scl general, tele s8 v8 Incr el pul in Ita anu, porta pn inn rd no vat, In rteucorea acetic e ges tue perky {foctztea pels do coresponceria si peneu uizarea acectra. Sturle Web pen Hecare pachel furzean Ge asemenea noma pve inscere ici insta de la © distibuyie suesl, numerouse pachete sunt configurate cx ajutorel ‘utilitarului configure, ceea ce facilites’ configurarea si consteuirea programelor pe 0 ‘varietate de sisteme, In cazul in cate construirea unui program esueazi, puteyi fi obligat si rulagi din now wtilizarul configure cu alte optiuni decat cele pe care le-afi specificatinigial. Daci este necesar, trebuie si impiedicati utilitarul cont igure si foloseascX informagi sal- vate de la rularea anterioarda acestui program. Puteti sterge astfel informapile stocate: % make distelean ‘Alternats, mai putei proceda gi atfet % rm config.cache 4 aake clei Indiferent de caa, trebuie si rulati din now configure dupi acces, Anexa A Objinerea si instalarea programelor’ 503 Instalarea sistemului MySQL pe UNIX Existi distibusii disponibile pentru diferite versiuni de MySQL. Variantele stabile curente au aursere de versiune din seria 3.22, Variantele de dezvoltare curente se afld in seria 3.23. In general, trebuie si folosifi versiunea cu numirul cel mai mare din seria pe cate doriti si ofolositidisponiblé in formaval de distribuyie pe care doriti sil uilzay Distribusiile MySQL se folosese in format binas, RPM si format sursi. Distsibusile binard si RPM sunt mai usor de instalat dar trebuie si acceptati paramesii prestabiliti pentru structura si, configurarca instalarii, care sunt incorporayi in, distributie. Discribupile sursi sunt mai dificil de instala, deoarece trebuie s& compli program, dar dobindifi un contrel mai mare asupra parametrilor de configurare. De exemplo, puteti compile distribuyia destinark numai suportului pentru clienji féri a constrat Serverul, iar dumneavoastr’ puteyi modifica locayia unde dorii si instalayi programil ile congin una sau mai multe dinsre urmitoarele componente: © Serverul mysaid 1 Programele client (aysal, nysalacman si asa mai departe) si suport pentru programarea clieajlor (fisiere bibliotecd si antet) © Documentatie © Baza de date pentru evaluarea performanyélor # Suport penta limbs} ile sarsi gi binar contin toate aceste elemente, Ficcare fisicr, RPM conyine rnamai citéva dintre ele, deci putes fi obligat si instalayi mai multe figiere RPM pentru cobgine tot ceea ce aveyi nevoie Dac intengionati si vi conectasi la un server care ruleaz& deja pe un alt ealeulator, mu trebvie si instilagi un server. Dar trebuie intordeauna si instalati programe client: © Dac nu rulgi un server, vefi avea nevoie de clienti pentru a vi putea conecta la un server situat pe un alt calculator, ¢ Daci rulati an server, dori sk vl puteti conecta la acesta de la gezda serverului, musi fig forjat si deschideri sesiunea de lucru la un alt calculator care dispune de progre- ‘mul client, aumai pentru a va testa serverul O trecere in revista a instalirii sistemului MySQL Instalarea sistemului MySQL pe UNIX implici urmitoarele etape: 1, Creati un cont UNIX pentru rorul (dacd install serveral) 2. Objineti gi despachetapi toate distéibugile pe care dotiti sie instalai. Daci folosii o distriburie sursi, compilati-o i instalay-o. 3, Rola scrips mysq)_snstall_d pennraainilizaeatalogul de date gi tabelele de acor~ dare (numa. cind sistenvel MySQL este instalat pentru prima daté pe un calculator) jzaroral si grupul sub al erui cont va nla riliza- 4. Pornigi serverul, 504 Parteaa V-a . Anoxe. 5. Citi éapicolul 11, .Administrares generali sistemului MySQL", pentru avi fami atiza cu procedurile administrative generale. In particulas, eeebwie si citi seciuaile cu privire la pornirea si oprirea serverului, precum sila rularea serverului in calitate de utilizator fir privilegii. Crearea unui cont pentru utilizatorul MySQL utes! omite aceastl sectiune daci rulayi numai programe cliont MySQL simu iotengionati si rulafi un server MySQL. Serveral MySQL poate fi rulat sub orice cont de utlizator UNIX pe sistermul dam- neavoastra, dar, din motive administrative side securitate, cel mai bine este si nu rulayi serverul sub eontul root, Vi recomand s8 crea un cont separat pentru activitatea de administra sistemului MySQL gi si rulai serverul sub contul respecti. fn acest mod, putefi deschide sesiunes de lucra sub contul vtilizatorului respectv si averi privilegi complete in catalogul de date pentru executarea operatilor de intrernere si depanare Procedurile pentru crearea conturilor de utilizator variazi de la un sistem Ia alt Consultati-va documentata local, pentru a obfine detalii mai concrete. Aceasti carte foloseste aysaladn si myseigr ca nume de utilizator si ume de grup UNIX ale acestui cont. Dact intengionayi si instalayi MySQL numai pentru uz personal, il pureti rula sub contul propriu, caz in care veti putea folosi proprile dumneavoastr’ nume de utilizator si de grup oriunde vederi mentiunile nysqlaan si rysalgr in aceastd carte, Daci instalai dn fisiere RPM, un uuilizator denumit aysal este creat automat ca parte a procedurii de instalare RPM. In acest caz, vet! inlocui nysqade cu mysq2. Avantajele utlizarii unui cont separat, fir3 privilegi, fa locul contului eoot pentru cexploatarea sistemului MySQL sunt urmivoarele: © Daci nu rulayi MySQL ca root, nimeni nu poate exploata serverul ca bresi de securi- tate pentru a dobindi accesul sub contul root. Executarea operatiunilor administrative din MySQL din contul unui utlizator fark privilegii este mai siguri decit din conrul root. «# Serverul va crea figiere aflate in posesia usilizatorulyi aysqiada, nu in cea 2 tilizato Inj root. Cu eft utilizatorul root define mai pusine fgiere in sistemul dumneavoaste3, cu atat mai bine, ‘© Din punct de vedere conceptual, este mai indicat ca activitatea legati de MySQL si se desfigoare intr-un cont separa; atfel, aspectele legate de MySQL din sistemul dum- ‘neavoastri devin mai ugor de sesizat. De exemplu, in eatalogul unde sunt pistrace figierele cron, veyiavea un fipier separat pentru utilizatorul MySQL mysaiadn.'In cxz ‘contrat, sarcinile cron aferente sistemului MySQL se vor gisi in fisierul utilizatorului root, aituri de toate operarile executate periodic in contul root. Obtinerea si instalarea distributiei MySQL in inscructiunile urmitoare, voi folosi versiune ca simbol al numérului versiunii dis- tribugiei MySQL pe care o utiliza, respectiv platfora ca nume al platformei pe care ‘ instalagi, Acestea sunt folosite in numele de fisiere din distribupi, astfl incde dis- ‘Anexa A Obfinerea siinstalarea programelor = 505 tribugile si poatd fi identificate cu upuring’ si diferentiate una de alta. Un numa de ver- Sune este ceva de gemul 3.22.26 st .28.4-a1pha. Un nume de platform este ceva de sgenul sgi-srie6,9-mips sau dec-osf4.0b-apha. Instalarea unei distribufii binare Fisierele unei distributii binare au nume precum nysql-versiune-pLatforne.tar oz. Procurati-vi fsierul de distribuyie pentru versiunea si platforma dorite gi inseray-] in catalogul unde dorigi si instalayi MySQL, de exemplu /usr/Local. Despachetayi distribuyia folosind una dintre urmisoarele comenzi (folosigi a doua comand, dacé versiunea dumneavoastri a programului tar nu injelege optiunea 2 pen tru decomprinarea distributie') 4 tar axf nyaal-versiuno-platforsa.tar.g S guedp < nyai-veriunecpastorsa-targk | tate in despachearea distibugiei se creeaz4 un catalog, denumit aysql-versiune-plat fore Ee dee nae dba Pentcu a fale seferita la acest catalog, cen ole tari simbolies ln 6 mysql-versiune-platvorma aysal ‘Acum, pate face referce a catalog de nstaate sub numele (usr /2oeeh aysal, dacs sfc MSU tn xg 06 alulun anes ‘efi folosi numaé suportul pentru client furnizat de distribusi simu rulayi un ses Seminar de inotlat sistemul MySQL- Dacd instalay MySQL. pentre prima dat, comast onsultagl seciunea ,lnitializarea catalogului de date ji a tabelelor de acordare". Dact sctualizatio intalae existent, consultatisectiunes ,Pornirea erverului*. Instalarea unei distribufii RPM Figierele RPM sunt disponibile pentru instalarea sistemului MySQL. pe sisteme Linux Numele de fier ale acestora sunt urmitoarele: uySoL-verstune-plattorma..cps Programul server. # nysaL-client.versiune-piacforma. roa Programele client. syst-develvarsiunepaetorsam ee ‘uport pentru dezvoltare (bibliotec client gi fisiere antet) pentru scrierea programelo See er vel de teten dak doi oon au sso spt Pes DB pentru accssul la bazele de date MySQL. © nysat-benzh. versiune-platforma.ron pee de testace si evaluare a performanfelor Necesié Perl gi modalul so} hysai-noastes, Vi puteti procura un RPM pentru modulul tsql-Mysai-Roduies de adresa waw.sysal con. uysat-versiune.sec.rpm Sursa pentro programul serves, programele client si programele de a performantelor restare si evaluat 506 ParteaalV-a _Anexe [Nu trebuié si vi aflagiintr-un anumit catalog atunci cind instalati MySQL dintr-o dis- triburie RPM, deoarece fisierele RPM congin informatii care arati ne bute nae fisierele pe care le contin. Pentru orice fisier RPM fisien_rpn putetiafla unde va fi instalat conginutul acestuia cu ajutorul urmatoarel comenzis rpm -apt fisier_com Pentru a instala un fisier RPM, folosisi aceasti comands: % rpn -t fisier_ row Diferitele componente ale sistemului MySQL sunt impiryite in diferite figiere RPM, deci poate fi necesar si instalayi mai mult de un fisier RPM. Pentru a instala suportul pentru client, folost! aceasti comanda: 4 rpm -4 MyS0L-elient-versiune-platforma.rpR entra instala suportul pentru server, folosigi urmitoarea comand: rpm -1 WyS0L-versiune-platforma.rpR Dect intentionati si scrieti proprile dumneavoastri programe folosind suportul pentra programarea clienilos, nu uitagi si instalaifigirul RPM de deavoltare: © rpm -4 tySOl-devel-versiune-plecforne.rpE Dict intentionat si folosti numai soportul pentru cliengifurnizat de distibuyie gna rulati tan server, afi trminat de instal sistemul MySQL. Dackinstalayi MySQL pentru prima data, torus, consultayi sectiunea ,[nigalizarea catalogului de date si a tabelelor de acor- dare". Daci acrualizario instalare existent, consulta seyiunea ,Porirea server” Dacé dori si instalayi de lafisierul RPM sursi, urmitoarea comands este suficienti: ‘rpm --reconpile WySdl-versiune.sre.rpa Instalarea unei distributii sursi Disb su au name precum msh-versiun.cargz, unde versiune ete namie ral versiunii MySQL. Selecta catalogul unde dori st despachesafi distriburia i deplasati-vi la acesta. Procuray-vi fisierul de distribu si despachecap- folosind una dintre urmitoarele comenzi (folosji a doua comand in cazul in care versiunea dum- neavoastri a programului tar nu ingelege optiunea z pentru decomprimarea distributii} tar mxf aysal-versiune-olatforma.tar.az ‘s gunzip < aysql-versiune-plecforna.tar.gz | tar xf - Prin despachetarea distributei, se creeaz’ un catalog aysal-versiune, care include conyinul distriburiei. Deplasafi-vi in acest catalog: ed ayoql-versiune ‘cu seo configura et compl! dtribuinsnt dea o putea isla Dack aceste etape nu dau nici un rezultat, examina capitolul ,Instalareasistemului MySQL* fin manvsil de relenng MySQUs cu prectdere nce noe specie de satem pe ene poate confine manualul eu privire a tipul calculatorului dumneavossts3. Folosifi comanda contigure pentru a configura distribuys: «/oontigure Puteti specifica optiuni pentru configure, daci dori. Pentru ¢ obgine o list cu optin~ nile disponibile, rulapi urmatoarea comand’: * Hl ike | ‘Anoxa A Obfinerea si instalarea programelor 507 % sfeontigure --neip Lista urmitoare prezined unele optiuni de configurare utile pentru mul: --without-sarver Configurare numai pentru construirea suportului pentru client (programe client sau biblioteci client). Puteyifolosi aceasta opriune daci intentionati sé obyineyi acces Ja un server care ruleazi deja pe un alt calculator. (# =-profixenune_cate in mod prestabilt,catalogul radicina folositlainstalare este (var /6ca1. Catalogu! de date, cliengi, serverul, bibliotecile client si fisierele antec sunt instalate respectiv in cataloagele var, bin, Libexee, 1b si Anclude situate in acest catalog. Daci doriti si modifica ectalogul ridacind de instalae, folosi optiunea ~prefsx. --tocelstatedir wne_cale ‘Aceastd optiune modified amplasamentul catalogului de date, O putes folosi dack nw orig si vi pistrai bazele de date in catalogu! Jusr/2ocat/var. @ --with-Low-senory Fisierul sursi sql/sqi_yace.co necesiti o mare cantitate dememorie pentru afi com- plat, coca-ce uneori determina suprasolicitarea constructei, Printre simptomele aces~ tei probleme se numiri mesaje de eroare privind ,semnalul fatal 11“ sau epuizarea memoriei vituale. Opfiunea ~-nith-ow-nesory determing invocarea compilatorului cu opfivn care au ca rezultat uilizarea unci cantitigi mai reduse de memorie. suyia i apoi instalaji-o: Dupt ce afi rulat configure, compilati dist make make instal? ack nu ati folosit optiunes -pretix pentru a specifica un catalog de instalare in care aveti permisiunes de scriere este necesar si Iuerayi sub contul root pentru a'rula comanda de instalare, ‘Daci vei folos! numai suportul entra clieng furnizat de distribusie simu rulayiun server, agi terminat de insalat sstemul MySQL. Daci instalayi MySQL pentru prima dati totus, consultatisecs.unea urmitoare. Dack acwalizati o instalare existent’, consulta sectiunea =Porirea serverului" Inifializarea catalogului de date si a tabelelor de acordare fnainte de a putea folosi sistemul dumneavoasted MySQL instalat,trebuie si inisilizayi baza de date ayse2, depozit al tabelelor de acordare eare controleaz3 accesul din reser la serverul dumneavoasiri. Accasté operatic este necesari numai pentru instaléri noi gi ppamai daci vf rula ua server. Daci executayi numai instar ale programlui client, puteti omite ssyiunea de fas, Pentru o distributic binard, rulayicomenzile din catalogul fe instalare (pirintele catalogului bin creat de distribuie), Pentru 0 distribute sursi, rulafi comenzile din catalogul amplasat la nivelul cel mai de sus al disteibutie. DATADIA este numele citi de acces spre eatalogal dumneavoastri de date. tn mod normal, veti rula comenzile urmitoare din contul caot. Daci afi deschis sesiunea de lucru ca

You might also like