aplicarea unei

Înainte de lansarea oficială, toate versiunile MySQL sunt testate pe mai multe platforme. Acest lucru nu înseamnă că MySQL nu are greșeli, dar în cazul în care au, acest lucru nu este suficient, și ei nu sunt atât de ușor de găsit. În orice caz, se confruntă cu o problemă care este întotdeauna util pentru a încerca să determine exact ceea ce se blochează sistemul - atunci sunt șanse ca problema va fi rezolvată în viitorul apropiat, va fi mult mai mare.

În primul rând, trebuie să încercați pentru a izola problema. Determinați ce se întâmplă: dacă mysqld daemon se oprește, sau o problemă cu clientul. Aflați cât timp serverul dvs. mysqld a fost prin executarea mysqladmin versiune. În cazul în care mysqld opri executia, atunci afla de ce puteți explora fișierul mysql-date-directorul / `hostname`.err (a se vedea secțiunea 4.9.1,„Jurnal erori“).

Cauza multor accidente MySQL sunt corupte fișiere index și fișiere de date. MySQL actualizează datele de pe disc, folosind sistemul de scriere de apel (). după fiecare declarație SQL și înainte clientul va fi notificat cu privire la rezultatul (cu toate acestea, atunci când se efectuează cu delay_key_write nu este: Numai datele sunt scrise). Rezultă că datele nu vor fi afectate, chiar și în cazul unui accident mysqld. deoarece sistemul de operare se va asigura că datele care nu sunt eliminate, au fost înregistrate pe disc. Puteți forța MySQL să-și arunce totul pe disc după fiecare SQL-comandă pornind de mysqld cu --flush.

Toate acestea înseamnă că tabelele obișnuite nu trebuie să fie deteriorate; cu excepția următoarelor cazuri:

Cineva / ceva pentru a ucide procesul mysqld, sau opriți mașina în mijlocul operației de actualizare.

Sa dovedit a fi un bug în mysqld. a determinat-o la mijlocul unei actualizări.

Oricine lucrează cu fișiere de date sau fișiere index în afara mysqld și fără blocarea tabelelor.

Când se execută mai multe servere mysqld cu aceleași date privind sistemul nu suportă încuietori sistem de fișiere bune (puse în aplicare în mod normal, lockd daemon) sau atunci când rulează mai multe servere cu --skip-extern-blocare

Există deteriorat fișier index sau un fișier de date care conține o serie de date foarte proaste, care induce în eroare mysqld.

Sa dovedit a fi în codul de înregistrare a datelor. Acest lucru este puțin probabil, dar, în general, este posibil. În acest caz, puteți încerca să schimbați formatul de fișier în altul, în baza de date handler relevantă folosind ALTER TABLE pe o copie a tabelului reparat!

Deoarece pentru a găsi o cauză a eșecului este întotdeauna dificil, puteți încerca mai întâi să afle că faptul că lucra pentru alții blocări pentru tine. Încercați următoarele:

Oprește daemon mysqld prin oprirea mysqladmin. urmați myisamchk --silent --force * / *. MYI pe toate mesele și reporniți daemon mysqld. Această garanție starea corectă inițială (a se vedea capitolul 4, administrarea bazelor de date).

Utilizați mysqld --log și să încerce să se determine din informațiile din jurnalele, în cazul în care nu sunt cauzate de încetarea server în orice interogare specifice. Aproximativ 95% dintre toate bug-urile sunt legate de cereri specifice! De obicei, aceasta este una dintre ultimele interogări în fișierul jurnal chiar înainte de MySQL restartat (a se vedea secțiunea 4.9.2, „General Solicitare Log“). Dacă poate ucide în mod repetat, MySQL cu una dintre cererile, chiar și atunci când tabelele au fost verificate imediat înainte de executarea cererii, este posibil pentru a localiza bug-ul și să pregătească un raport de eroare! a se vedea secțiunea 1.8.1.3, «Cum de a raporta erori sau probleme“.

Încercați să facă un caz test pe care o putem folosi pentru a reproduce problema (a se vedea secțiunea E.1.6, «Crearea unui caz test cu un tabel deteriorat").

Încercați să rulați testul mysql-test a inclus și obiectivele de referință MySQL (a se vedea secțiunea 9.1.2, «MySQL Pachetul de test"). Aceste teste ar trebui să fie destul de bine pentru a testa MySQL. Puteți adăuga, de asemenea, codul de la test pentru a simula performanța aplicației dumneavoastră! Criteriile de referință pot fi găsite în directorul bancă într-o distribuție sursă sau, în cazul versiunii binare, în subdirectorul directorul sql-banc de instalare MySQL.

Încercați fork_test.pl și fork2_test.pl.

Dacă ceva nu merge bine, apoi se adună informații despre posibilele erori va fi mult mai ușor dacă configurați MySQL pentru depanare. Reconfigura MySQL, se aplică pentru a configura opțiunea --with-debug sau --with-debug = plin. și apoi recompilați (a se vedea secțiunea E.1, serverul «Debug MySQL").

Configurarea MySQL în modul de depanare se aprinde repartitor de memorie în condiții de siguranță, care pot găsi unele erori. În plus, versiunea de depanare oferă o mulțime de informații cu privire la ceea ce se întâmplă.

Aflați dacă cele mai recente patch-uri pentru sistemul de operare utilizat.

Utilizați opțiunea de blocare --skip extern la mysqld. Pe unele sisteme, managerul de blocare lockd nu funcționează în mod corespunzător; Opțiunea --skip-extern-blocare tell mysqld să nu utilizeze blocare externă (aceasta înseamnă că cele două servere nu poate rula mysqld pe aceleași date și că trebuie să fie atenți atunci când utilizați `myisamchk“. Cu toate acestea, utilizarea acestei opțiuni poate fi de mare beneficiu pentru scopuri de testare).

Dacă există o situație în care se pare că mysqld se execută, dar nu răspunde, este necesar să se încerce să execute mysqladmin -u processlist rădăcină. Uneori mysqld nu este comatos, chiar dacă se pare că este. Problema poate fi că toți compușii utilizați, sau poate există unele probleme de blocare internă. mysqladmin processlist de obicei în măsură să facă o conexiune, chiar și în aceste cazuri, și poate furniza informații utile despre numărul actual de conexiuni și starea lor.

Executați comanda într-o fereastră separată mysqladmin 5 stare sau -I mysqladmin 5 -r pentru a -i afișa statistici, alte interogări se va desfășura până.

Încercați următoarele:

Rulați script-urile de test.

stivă de afișare (backtrace) și variabilele locale pe trei niveluri inferioare. În GDB puteți face următoarele comenzi după mysqld accident în interiorul GDB:

Cu GDB, puteți găsi, de asemenea, ce sunt fluxurile (prin fire de informații), și trece la un fir specific de fir #. în cazul în care # - numărul fluxului.

Încercați să simuleze aplicația cu o Perl-script care ar provoca accident sau defecțiune MySQL.

Trimite-ne un raport de eroare normală (a se vedea secțiunea 1.8.1.3, «Cum de a raporta erori sau probleme"). Orice detalii ar fi de prisos. Deoarece MySQL lucrează pentru atât de multe locuri, este posibil ca cauza accidentului este cauzat, care este specific doar la computer (de exemplu, eroarea asociată cu bibliotecile de sistem special).

Dacă aveți o problemă cu tabele care conțin rânduri și coloane de lungime dinamice nu sunt folosite BLOB / tip de text (dar numai pe o coloană de tip VARCHAR), puteți încerca să schimbe toate VARCHAR la CHAR cu ALTER TABLE. Acest lucru va forța MySQL pentru a utiliza șir de dimensiuni fixe. Pentru șiruri de dimensiune fixă ​​nevoie de un mic spatiu suplimentar, dar ele sunt mult mai puțin susceptibile de a deteriora! Curent cod rând dinamic, fără probleme a fost operat la MySQL AB timp de cel puțin 3 ani, dar lungimea liniei dinamice, în principiu, sunt mai predispuse la erori, astfel încât această rețetă poate fi în măsură să vă să faci ceva pentru a ajuta!

articole similare