MySQL-taulut voivat muuttua korruptoituneiksi, joita johtaa lukemattomaksi tietoksi ja mahdollisiin palvelimen kaasuksiin. Tämä opas ohjaa sinua korruptoiden taulujen diagnosoointiin ja korjaamiseen sekä MyISAM- että InnoDB-tallennustekniikoilla käyttämällä sisäänrakennettuja MySQL-työkaluja ja palautusmenetelmiä.
Tausta
Korruptoinnin yleisiä syitä ovat:
- MySQL-palvelimen keskeytys kirjoitusoperaation aikana
- Samaan tauluun samanaikaista muokkausta ulkoisesta ohjelmasta ja palvelimelta
- Tietokoneen odottamaton sammuminen
- Laitevian kaltaiset ongelmat tietokoneessa
- MySQL-koodin sisäiset virheet
Ennen ongelmien ratkaisemisen tai korjauksen yrittämistä on välttämätöntä luoda varmuuskopio tietokansiostasi, jotta vähennetään datamenetyksen riski.
Korruptoiden taulujen korjaaminen
-
Vaihe 1: Pysäytä MySQL ja luo varmuuskopio
Pysäytä MySQL-palvelu:
sudo systemctl stop mysqlHuomautus: Jotkut alustat kuten Rocky Linux voivat nimetä MySQL-palvelun
mysqld-ksi.Kopioi kaikki tiedostosi uuteen varmuuskopiokansioon. Ubuntujärjestelmillä oletusarvoisen tietokansion sijainti on yleensä
/var/lib/mysql/:cp -r /var/lib/mysql /var/lib/mysql_bkp -
Vaihe 2: Tarkista, onko taulu korruptoitu (MyISAM)
Jos taulu käyttää MyISAM-tallennustekniikkaa, voit selvittää sen tilan suorittamalla
CHECK TABLE-komentoa MySQL-promptista:mysql> CHECK TABLE table_name;Tulosteen tulisi sisältää viestin, joka kertoo, onko taulu korruptoitu.
-
Vaihe 3: Korjaa MyISAM-taulut
Jos taulu on vahvasti korruptoitu, yritä sen korjaamista:
mysql> REPAIR TABLE table_name;Kun korjaus onnistuu, tulosteen tulisi sisältää viestin, joka vahvistaa korjauksen lopettamisen. Esimerkiksi:
+--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ -
Vaihe 4: Käsittele InnoDB-taulut kaasuavustuksen avulla
Jos korruptoitu taulu käyttää InnoDB-tallennustekniikkaa (oletus MySQL 8.0 ja myöhemmillä versioilla), korjausmenetelmä eroaa. InnoDB sisältää automatisoidun korruptoinnin tarkistukset ja korjaukset, tunnistamalla korruptoituneet sivut suorittamalla checksummit kunkin luetun sivun käsittelyssä.
Yritä käynnistää MySQL-palvelu uudelleen tarkistaaksesi, palautuuko pääsy palvelimeen:
sudo systemctl restart mysqlInnoDB:n sisäänrakennettu kaasuavustusmekanismi ratkaisee useimmat ongelmat palvelun uudelleenkäynnistyksen yhteydessä.
-
Vaihe 5: Ota käyttöön InnoDB:n force_recovery (jos tarvitaan)
Jos palvelin jatkaa kaasua tai on pääsykelpoton, ota käyttöön InnoDB:n
force_recovery-asetus. Muokkaamysqld.cnf-tiedostoa, joka sijaitsee yleensä/etc/mysql-hakemistossa Ubuntussa ja Debianissa tai/etc/my.cnf.d-hakemistossa Red Hatissa ja Rocky:ssä:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]-osiossa lisää seuraava rivi:[mysqld] innodb_force_recovery=1Tallenna ja sulje tiedosto, sitten yritä käynnistää MySQL-palvelu uudelleen.
-
Vaihe 6: Poimi ja lataa InnoDB-taulu uudelleen
Jos pääsy korruptoituun tauluun onnistuu, käytä
mysqldump-työkalua viedäksesi taulun tiedot uuteen tiedostoon:mysqldump database_name table_name > out.sqlPoista taulu tietokannasta:
mysql -u user -p --execute="DROP TABLE database_name.table_name"Lataa taulu takaisin luodun varmuuskopiotiedoston avulla:
mysql -u user -p < out.sql
Yleisiä ongelmia
- Jos
REPAIR TABLE-komento epäonnistuu MyISAM-tauluilla, korruptio voi olla vakava. Harkitse palautusta varmuuskopiosta. - InnoDB-tauluille, jos
innodb_force_recovery=1ei toimi, voit kokeilla arvon kasvattamista ennen 7:een, mutta korkeampi arvo voi estää kirjoitusoperaatiot. - Poista aina
innodb_force_recovery-rivi määritystiedostostasi palautuksen jälkeen normaaliin toimintaan saakka.