Soluții de eroare

Eroarea "Table is marked as crashed" în MySQL și repararea tabelei cu phpMyAdmin

  • 16 minute de citit
  • Echipa Hostragons
Eroarea "Table is marked as crashed" în MySQL și repararea tabelei cu phpMyAdmin

Eroarea MySQL "Table is marked as crashed" indică, de obicei, că o tabelă care utilizează motorul de stocare MyISAM s-a corupt și nu poate fi citită în siguranță de MySQL. Cea mai rapidă soluție este, după ce ați realizat un backup al bazei de date, să selectați tabela corespunzătoare din phpMyAdmin și să rulați operația Reparare tabelă. Totuși, această eroare nu este întotdeauna o simplă notificare care poate fi rezolvată cu un singur clic; poate reapărea din cauza unei opriri bruște a serverului, a umplerii discului, a interogărilor eronate, a unui trafic intens de scriere sau a unor configurații vechi ale MySQL. În acest ghid, veți găsi pas cu pas cauzele erorii, pașii pentru o reparare sigură cu phpMyAdmin, verificarea backup-ului înainte de proces și metodele de prevenire pe termen lung.

Site-ul dumneavoastră poate folosi WordPress, OpenCart, software PHP personalizat sau un sistem de forum; atunci când tabela MySQL se corupe, vizitatorii pot întâlni ecran alb, eroare 500, timeout la conexiune sau erori neașteptate în panoul de administrare. În special, în cazul site-urilor de comerț electronic, dacă tabelele de comenzi, produse, sesiuni sau coșuri sunt afectate, chiar și o mică întrerupere poate duce la pierderi financiare. De aceea, în timpul procesului de reparare, este esențial să protejăm datele și să înțelegem cauza principală a erorii. O infrastructură de găzduire de încredere, backup-uri regulate și alegerea corectă a motorului de baze de date pot reduce semnificativ aceste riscuri. În acest sens, opțiunile Web hosting Hostragons sau Server VPS Hostragons pentru proiecte cu cerințe mari de resurse pot fi evaluate.

Ce este eroarea "Table is marked as crashed"?

Eroarea "Table is marked as crashed" indică faptul că serverul MySQL a marcat o tabelă ca fiind coruptă și că există probleme în realizarea operațiunilor de citire sau scriere pe tabela respectivă. Mesajul de eroare apare de obicei în următoarele forme: Table './veritabani/numele_tabelei' is marked as crashed and should be repaired sau Incorrect key file for table. Acest mesaj sugerează că există probleme în fișierul tabelei, în indexuri sau în integritatea tabelei.

Această eroare apare cel mai frecvent în tabelele MyISAM. MyISAM este un motor de stocare mai vechi, axat pe citiri rapide; totuși, capacitatea sa de recuperare după o colapsare nu este la fel de robustă ca cea a InnoDB. Dacă serverul se închide brusc, operațiile de scriere pe disc sunt întrerupte sau serviciul MySQL se încheie fără a se închide corect, tabelele MyISAM pot deveni ușor corupte. InnoDB, pe de altă parte, este de obicei mai rezistent datorită mecanismelor de jurnalizare a tranzacțiilor și recuperării în caz de colaps; totuși, acest lucru nu înseamnă că nu pot apărea probleme nici în tabelele InnoDB. În cazul InnoDB, problemele similare sunt adesea legate de spațiul tabelei, disc, jurnalul de tranzacții sau problemele cu dicționarul de date.

Cele mai frecvente cauze ale erorii

Deși repararea unei tabele cu phpMyAdmin pare adesea suficientă, dacă nu identificați cauza erorii, aceeași problemă se poate repeta în câteva zile sau ore. Iată cele mai frecvente scenarii întâlnite în experiența de teren:

  • Oprirea bruscă a serverului: Dacă MySQL scrie în tabel în timpul unei întreruperi de curent, a unei resetări a hardware-ului sau a unei colapsări a sistemului de operare, tabela se poate corupe.
  • Umplerea spațiului pe disc: Dacă MySQL nu poate scrie fișiere temporare, indexuri sau actualizări ale tabelei, integritatea datelor poate fi afectată. Utilizarea discului peste 90% este riscantă.
  • Oprirea forțată a serviciului MySQL: O terminare abruptă, cum ar fi kill -9, poate provoca probleme în special în timpul operațiunilor de scriere intense în tabelele MyISAM.
  • Trafic intensiv de scriere: Tabelele care sunt actualizate constant, cum ar fi cele pentru loguri, contoare, sesiuni sau căutări, sunt mai sensibile atunci când folosesc MyISAM.
  • Pluginuri sau teme defectuoase: În sisteme precum WordPress, pluginurile prost scrise pot genera un număr excesiv de interogări, provocând blocarea tabelei.
  • Probleme hardware sau de sistem de fișiere: Sectorele defecte ale discului, erorile I/O sau un sistem de fișiere corupt pot afecta fișierele bazei de date.
  • Versiune veche a MySQL: Versiunile învechite pot avea performanțe slabe, probleme de blocare și comportamente de recuperare mai slabe.

Pași critici de securitate înainte de reparare

Operația de reparare a bazei de date este de obicei sigură; totuși, orice operațiune efectuată pe o tabelă coruptă nu elimină complet riscul de pierdere a datelor. În special în medii de producție, adică atunci când lucrați pe un site live, prioritatea ar trebui să fie întotdeauna backup-ul.

1. Faceți un backup al bazei de date existente

Înainte de a începe repararea cu phpMyAdmin, exportați un backup instant al bazei de date. Este important să salvați datele care pot fi citite chiar dacă tabela este coruptă. În phpMyAdmin, selectați baza de date, faceți clic pe tab-ul Export, alegeți metoda personalizată în locul metodei rapide, dacă este posibil, și salvați backup-ul în format SQL. În cazul bazelor de date mari, exportul poate expira; în această situație, instrumentul de backup din panoul de control al hostingului sau mysqldump prin SSH ar putea fi mai fiabile. Este util să analizați resurse precum Soluții de backup de hosting în proiectele care nu au o politică de backup regulată.

2. Identificați care tabelă este coruptă

De obicei, mesajul de eroare conține numele tabelei. De exemplu, pe un site WordPress, tabelele wp_options, wp_posts, wp_comments sau wp_actionscheduler_actions pot apărea. În software-urile personalizate, numele tabelei poate fi găsit în jurnalele aplicației, jurnalele de erori PHP sau în jurnalul de erori MySQL. Identificarea tabelei corupte previne efectuarea de operațiuni inutile asupra întregii baze de date.

3. Puneți site-ul în modul de întreținere pe termen scurt

Dacă se fac noi operații de scriere pe tabel în timpul reparării, procesul poate eșua sau pot apărea inconsistențe de date. Un mod de întreținere de 2-5 minute pe site-urile cu trafic intens va face procesul mai sigur. Dacă folosiți WordPress, puteți opri acțiunile utilizatorilor cu un plugin de întreținere; dacă folosiți software personalizat, puteți utiliza o pagină temporară de întreținere sau o redirecționare a serverului web. Pentru o experiență de vizitator sigură, pagina de întreținere ar trebui să aibă SSL activat; dacă întâmpinați probleme cu certificatul, puteți verifica opțiunile certificat SSL.

Cum se repară o tabelă MySQL cu phpMyAdmin?

phpMyAdmin facilitează repararea tabelelor MySQL pentru utilizatorii fără cunoștințe tehnice în linia de comandă. Pașii următori sunt similari în panourile de hosting cPanel, Plesk și altele.

Pasul 1: Conectați-vă la phpMyAdmin din panoul de hosting

După ce ați intrat în panoul de control al hostingului, deschideți linkul phpMyAdmin din secțiunea bazelor de date. Dacă utilizați mai multe conturi de hosting sau domenii, asigurați-vă că lucrați pe contul corect. Efectuarea de operațiuni pe o bază de date greșită nu dă de obicei daune directe; totuși, poate duce la pierderi de timp și poate determina repararea unui mediu de testare în locul unui site live. Dacă aveți confuzii în asocierea domeniului și hostingului, ar fi util să revizuiți subiectul Administrarea domeniului.

Pasul 2: Selectați baza de date corectă

Din meniul din stânga, selectați baza de date utilizată de site-ul dumneavoastră. Pentru WordPress, numele bazei de date poate fi aflat din linia DB_NAME din fișierul wp-config.php. În proiectele PHP personalizate, numele bazei de date se găsește de obicei în fișierele config.php, .env sau database.php. Această verificare este foarte importantă dacă există mai multe site-uri pe același server.

Pasul 3: Marcați tabela coruptă

Odată ce baza de date s-a deschis, tabelele vor fi listate. Găsiți tabela menționată în mesajul de eroare și bifați caseta din stânga. Dacă primiți aceeași eroare pentru mai multe tabele, puteți selecta toate tabelele; totuși, este mai prudent să începeți cu tabela cea mai critică. Verificați dacă tabela este MyISAM uitându-vă la câmpul Tip sau Motor din linie.

Pasul 4: Rulați opțiunea de reparare a tabelei

După ce ați selectat tabela, din meniul derulant de la baza paginii, selectați opțiunea Reparare tabelă. phpMyAdmin execută în fundal de obicei comanda REPAIR TABLE numele_tabelei. După finalizarea procesului, veți vedea un rezultat de succes, avertizare sau eșec. Rezultatul de succes apare de obicei ca status OK. În cazul tabelelor mari, procesul poate dura câteva minute în loc de câteva secunde; în această perioadă, nu reîncărcați pagina și nu închideți browserul.

Pasul 5: Verificați tabela și testați site-ul

După ce reparația s-a încheiat, puteți rula din nou opțiunea Verificare tabelă din același meniu derulant. Apoi, testați pagina principală a site-ului, panoul de administrare, funcția de căutare, listele de produse și zona de autentificare a utilizatorilor. Dacă utilizați WordPress, este o practică bună să salvați permalink-urile, să goliți cache-ul și să verificați jurnalul de erori în panoul de administrare.

Ce înseamnă opțiunile de reparare din phpMyAdmin?

În phpMyAdmin nu există doar opțiuni de reparare, ci și diferite opțiuni de întreținere a tabelei. Fiecare opțiune are un scop diferit și nu ar trebui utilizată cu așteptări greșite.

Ce înseamnă opțiunile de reparare din phpMyAdmin?
OpțiuneCe face?Când se folosește?
Verificare tabelăVerifică integritatea structurală și starea de eroare a tabelei.Se folosește pentru validarea înainte și după reparare.
Reparare tabelăÎncercă să repare tabele și indexuri MyISAM corupte.Este primul pas sigur când se observă eroarea "Table is marked as crashed".
Optimizare tabelăReduce spațiile lăsate de înregistrările șterse, organizează tabela.Se folosește pentru performanță după ștergeri/actualizări intense.
Analiza tabelăActualizează statisticile indexului pentru planificatorul de interogări.Se preferă în caz de scădere a performanței sau utilizare incorectă a indexului.

În concluzie, eroarea "Table is marked as crashed" are ca opțiune directă relevantă operația Reparare tabelă. Operațiunile de optimizare și analiză sunt instrumente de întreținere utile; totuși, nu pot corecta o tabelă coruptă pe cont propriu.

De ce situația este diferită în tabelele InnoDB?

În phpMyAdmin, opțiunea Reparare tabelă pentru tabelele InnoDB nu funcționează întotdeauna conform așteptărilor. Motivul este că InnoDB nu funcționează pe baza unei logici simple de reparare a fișierelor, așa cum face MyISAM. InnoDB menține integritatea datelor prin intermediul jurnalelor de tranzacții, a jurnalului redo, a jurnalului undo și a structurilor de spațiu al tabelei. De aceea, soluțiile pentru problemele InnoDB implică de obicei examinarea jurnalele de servicii MySQL, verificarea stării discului, revenirea la un backup sau utilizarea modurilor avansate de recuperare.

Dacă mesajul de eroare indică o tabelă MyISAM, repararea cu phpMyAdmin va avea, cel mai probabil, succes. Totuși, dacă pe partea InnoDB primiți mesaje precum corrupt, tablespace, cannot open table, ar trebui mai întâi să faceți un backup și să examinați jurnalele serverului, în loc să încercați imediat repararea. În acest caz, este mai sigur să solicitați asistență de la furnizorul de hosting. În special pentru datele critice de comerț electronic, este preferabil să se evite încercările aleatorii și să se opteze pentru intervenții profesionale.

Ce trebuie să faceți dacă repararea eșuează?

Operațiunea de reparare a tabelei cu phpMyAdmin nu va fi întotdeauna de succes. Dimensiunea mare a tabelei, o corupere gravă a fișierului, o problemă de disc sau restricții de permisiuni pot împiedica procesul de reparare. În acest caz, se pot urma pașii următori:

  • Restaurarea din backup: Cea mai sigură metodă este să restaurați cel mai recent backup, realizat înainte de apariția erorii. Asigurați-vă că păstrați baza de date coruptă ca un fișier separat înainte de restaurare.
  • Utilizarea myisamchk prin SSH: Dacă aveți acces la server, instrumentul myisamchk poate fi utilizat pentru tabelele MyISAM. Această operațiune trebuie efectuată prin oprirea serviciului MySQL sau prin întreruperea accesului la tabel.
  • Comanda REPAIR TABLE: Din tab-ul SQL al phpMyAdmin, se poate rula comanda REPAIR TABLE numele_tabelei; pentru tabelele mari, opțiunile QUICK sau EXTENDED pot fi folosite.
  • Verificarea discului și inode-urilor: Dacă spațiul pe disc sau inode-urile sunt pline, repararea va eșua. Este necesar să curățați mai întâi backup-urile inutile, fișierele de log și fișierele temporare.
  • Examinarea jurnalele de erori ale serverului: Jurnalul de erori MySQL, jurnalul serverului web și jurnalul de erori PHP oferă date critice pentru identificarea cauzei principale.

Dacă utilizați hosting partajat, este posibil să nu aveți acces la SSH sau la oprirea serviciului. În acest caz, trimiterea mesajului de eroare, a numelui tabelei, a aproximativului moment în care a apărut eroarea și a datei ultimei backup, echipei de suport poate accelera soluționarea.

Cum să preveniți reapariția erorii?

O reparare unică elimină temporar problema; soluția permanentă constă în infrastructură și disciplină de întreținere. Următoarele măsuri reduc semnificativ riscul de corupție a tabelelor MySQL.

Considerați convertirea tabelelor MyISAM la InnoDB

În aplicațiile web actuale, InnoDB este în general o alegere mai sigură și mai robustă. Prin blocarea la nivel de rând, suportul pentru tranzacții și caracteristicile de recuperare după colaps, oferă avantaje în condiții de trafic intens de scriere comparativ cu MyISAM. Procesul de conversie se poate realiza simplu prin comanda ALTER TABLE numele_tabelei ENGINE=InnoDB; dar trebuie testat mai întâi în mediu de testare și să se efectueze un backup complet. Unele aplicații mai vechi pot depinde de indexuri fulltext sau de comportamente specifice MyISAM.

Utilizați backup-uri regulate și recuperabile

Un backup este valoros nu doar dacă a fost realizat, ci și dacă este recuperabil. Backup-urile zilnice, backup-urile complete săptămânale și realizarea de backup-uri manuale înainte de actualizările importante sunt o politică bună. Păstrarea unui backup de cel puțin 7 zile este un început rezonabil pentru majoritatea site-urilor mici și medii. În cazul site-urilor de comerț electronic, ar putea fi necesare backup-uri mai frecvente sau recuperarea bazată pe binlog pentru a reduce pierderile de comenzi.

Monitorizați utilizarea discului și resursele

Atunci când utilizarea discului ajunge la 85-90%, trebuie generat un semnal de alarmă. MySQL necesită spațiu liber pentru tabele temporare, fișiere log și operațiuni de indexare. De asemenea, trebuie monitorizate constant CPU, RAM și timpii de așteptare I/O. Un site care atinge constant limita resurselor este mai predispus la erori de bază de date. Dacă traficul dumneavoastră a crescut, poate fi logic să treceți de la un plan partajat la un pachet mai puternic; în această privință, paginile Hosting Corporate sau Hosting de înaltă performanță pot fi evaluate.

Verificați actualizările pluginurilor, temelor și software-ului

Software-ul vechi nu doar că creează vulnerabilități; de asemenea, poate trimite interogări ineficiente bazei de date. În WordPress, pluginurile neutilizate ar trebui eliminate în timpul întreținerii, tabelele de loguri care umflă baza de date ar trebui curățate, iar pluginurile nesigure ar trebui evitate. Testarea actualizărilor software-ului în mediu de staging înainte de implementare pe site-ul live previne apariția problemelor neașteptate cu tabelele sau indexurile.

Opriți corect serverul și creați un plan de întreținere

Dacă gestionați un server VPS sau dedicat, evitați oprirea forțată a serviciului MySQL. Este important să opriți serviciile într-un mod controlat înainte de întreținere, să faceți actualizările în orele de trafic redus și să verificați jurnalele după repornire. O disciplină planificată de întreținere reduce riscul de corupție, în special în bazele de date cu trafic intens.

Note speciale pentru site-urile WordPress

WordPress, de obicei, afișează erorile MySQL sub mesajul general a apărut o eroare la conectarea la baza de date. Cu toate acestea, examinând jurnalul de erori, se pot observa detalii despre tabele corupte. Tabelele frecvent afectate în WordPress includ wp_options, wp_posts, wp_postmeta, wp_comments și unele tabele de loguri sau cron create de pluginuri. Dacă tabela wp_options se corupe, setările generale ale site-ului nu pot fi citite; dacă wp_posts se corupe, conținutul nu poate fi listat; iar dacă tabelele de loguri ale pluginurilor se corup, panoul de administrare poate deveni lent.

WordPress are și o funcție încorporată de reparare a bazei de date. Adăugând temporar linia define('WP_ALLOW_REPAIR', true); în fișierul wp-config.php, se poate rula reparația de la adresa /wp-admin/maint/repair.php. Totuși, această linie trebuie eliminată după finalizarea procesului; altfel, pagina de reparare poate rămâne deschisă accesului neautorizat. Metoda phpMyAdmin este, de obicei, mai controlată, deoarece puteți vedea direct pe ce tabelă lucrați. Dacă căutați o infrastructură optimizată pentru proiecte WordPress, puteți consulta resursa hosting WordPress.

Când ar trebui să solicitați suport profesional?

Nu fiecare eroare MySQL este suficient de simplă pentru a fi rezolvată de unul singur. Dacă se întâmplă oricare dintre următoarele situații, este mai sigur să solicitați suport profesional:

  • Tabela coruptă conține date despre comenzi, plăți, membri sau date financiare.
  • După încercările de reparare, eroarea persistă sau tabela pare dispărută.
  • Dimensiunea bazei de date depășește câțiva GB și phpMyAdmin expiră.
  • Se observă erori de tablespace InnoDB sau de jurnal redo.
  • Există erori de disc, erori I/O sau alerte legate de sistemul de fișiere.
  • Nu aveți un backup recent curat.

Când creați o solicitare de suport, împărtășiți textul complet al mesajului de eroare, numele bazei de date și al tabelei afectate, momentul în care a început eroarea, ultima actualizare sau operațiune de migrare și, dacă este cazul, data backup-ului. Aceste informații pot reduce semnificativ timpul de soluționare.

Listă de verificare rapidă

Pentru a acționa rapid în caz de urgență, puteți urma această ordine:

  • Identificați numele tabelei corupte din mesajul de eroare.
  • Faceți un backup al bazei de date existente.
  • Puneți site-ul în modul de întreținere pe termen scurt.
  • Selectați baza de date corectă în phpMyAdmin.
  • Marcați tabela relevantă și rulați operația de reparare a tabelei.
  • Verificați tabela și testați funcțiile site-ului.
  • Reduceți din nou riscurile prin verificarea discului, a resurselor, a backup-ului și a motorului de tabelă.

Întrebări frecvente

Înseamnă eroarea MySQL "Table is marked as crashed" pierdere de date?

Nu înseamnă întotdeauna pierdere de date. Cele mai multe tabele MyISAM pot fi recuperate prin operația de reparare a tabelei din phpMyAdmin. Totuși, dacă tabela este grav coruptă, unele înregistrări pot fi compromise. De aceea, este important să faceți un backup al stării actuale înainte de reparare.

Este sigură operația de reparare a tabelei cu phpMyAdmin?

În general, este sigură; totuși, orice operațiune de întreținere efectuată pe o bază de date live implică riscuri. Realizarea unui backup înainte de proces, selectarea tabelei corecte și, dacă este posibil, punerea site-ului în modul de întreținere, crește siguranța. În cazul tabelelor mari sau critice, se recomandă suport profesional.

Ar trebui să folosesc opțiunea Reparare tabelă pentru tabelele InnoDB?

Tabelele InnoDB nu sunt reparate prin metoda clasică REPAIR TABLE ca tabelele MyISAM. În cazul problemelor cu InnoDB, este mai corect să verificați jurnalele MySQL, să verificați starea discului și, dacă este necesar, să reveniți la un backup. Încercările aleatorii de reparare pot crește riscul de pierdere a datelor.

De ce continuă să reapară această eroare?

Dacă eroarea persistă, cauza de bază ar putea rămâne nerezolvată. Doluarea discului, opririle bruște ale serviciului, traficul intens de scriere, pluginurile defecte, versiunea veche a MySQL sau continuarea utilizării MyISAM sunt cele mai frecvente motive. Identificarea cauzei principale este esențială pentru o soluție permanentă.

Ar trebui să contactez firma de hosting înainte de a face repararea?

În cazul erorilor simple ale tabelelor MyISAM, puteți să faceți un backup și să efectuați repararea cu phpMyAdmin. Totuși, dacă tabela conține date critice, nu aveți un backup, dimensiunea bazei de date este foarte mare sau observați erori de InnoDB, ar trebui să contactați echipa de suport de hosting pentru a obține ajutor.

Concluzie

Eroarea MySQL "Table is marked as crashed" este o notificare de corupție a bazei de date, întâlnită în special în tabelele MyISAM, care poate fi adesea rezolvată prin phpMyAdmin. Abordarea corectă este să faceți un backup, să identificați tabela coruptă, să efectuați repararea prin phpMyAdmin și apoi să eliminați cauza erorii. Backup-urile regulate, resursele serverului suficiente, utilizarea InnoDB și o infrastructură software actualizată vor reduce probabilitatea reapariției acestei probleme. Dacă întâmpinați frecvent erori similare pe site-ul dumneavoastră, puteți analiza infrastructura și evalua soluțiile de hosting adecvate prin resursele Hostragons sau solicitați asistență de la echipa noastră de suport.

Distribuie acest articol:

Echipa Hostragons

Ghiduri actualizate de la echipa noastră de experți privind găzduirea, serverele și numele de domeniu. Haideți să găsim împreună soluția potrivită pentru proiectul dumneavoastră.

Contactați-ne