"tbl_name.frm" table definition (table) bestand "tbl_name. MYD " Data File "tbl_name. MYI" indexbestand Elk van deze drie bestandstypen kan verschillende vormen van corruptie vertonen, maar het probleem doet zich meestal voor in databestanden en indexbestanden. myisamchk creëert een ". MYD" (data) bestand werkt, werkt het door het oude ". MYD-bestand en hernoem het nieuwe bestand naar de oorspronkelijke bestandsnaam om de reparatiefase te beëindigen. Als je --quick gebruikt, creëert myisamchk geen tijdelijke ". MYD"-bestand, ga er gewoon van uit. MYD"-bestand correct is en maakt alleen een nieuw indexbestand aan, zonder aan te raken". MYD"-bestand, wat veilig is omdat myisamchk automatisch detecteert". MYD"-bestand beschadigd is en in dit geval moet ik de reparatie opgeven. Je kunt myisamchk ook twee opties geven -- snelle opties. In dit geval geeft myisamchk sommige fouten (zoals herhalende toetsen) niet op, maar probeert in plaats daarvan de ". MYD"-bestand om ze op te lossen. Meestal is het alleen nuttig als je een normale oplossing implementeert op te weinig vrije schijfruimte, met de twee snelle opties. In dat geval moet je in ieder geval een back-up maken voordat je myisamchk gebruikt. 1. Hoe de fouten in de tabel te controleren Om een tabel te controleren, gebruik je het volgende commando: Myisamchk tbl_name Dit vangt 99,99% van alle fouten op. Wat het niet kan achterhalen, is dat corruptie alleen in databestanden voorkomt (wat zeldzaam is). Als je een tabel wilt controleren, moet je meestal myisamchk draaien zonder de optie of een van de -s of --stille opties gebruiken. myisamchk -e tbl_name Het voert een volledig grondige datacontrole uit (-e betekent "uitgebreide controle"). Het voert een leescontrole per toets uit op elke regel om te bevestigen dat ze naar de juiste lijn wijzen. Dit kan lang duren op een grote tafel met veel sleutels. Myisamchk stopt meestal zodra hij de eerste fout vindt. Als je meer informatie wilt, kun je de --verbose(-v) optie toevoegen. Dit zorgt ervoor dat myisamchk doorgaat tot maximaal 20 fouten. In algemeen gebruik is een eenvoudige myisamchk (zonder andere argumenten dan de tabelnaam) voldoende. myisamchk -e -i tbl_name Net als het vorige commando, maar de -i-optie vertelt myisamchk ook om wat statistieken uit te printen. 2. Hoe de tafel te repareren Het symptoom van een corrupte tabel is meestal een onverwachte querybreuk, en je kunt bijvoorbeeld deze fouten zien: "tbl_name.frm" is vergrendeld en kan niet worden gewijzigd. Het bestand "tbl_name niet kunnen vinden. MYI"(Errcode :### )。 Krijg fout ### van de tabelprocessor (in dit geval is fout 135 een uitzondering). Onverwacht bestand beëindigd. Dossierbestanden werden vernietigd. In deze gevallen moet je de tafel repareren. Myisamchk detecteert en lost meestal de meeste dingen op die misgaan. Het reparatieproces bestaat uit maximaal 4 fasen, hieronder beschreven. Voordat je begint, moet je rechten op de databasemap en checklistbestanden afsluiten om te controleren of ze leesbaar zijn voor Unix-gebruikers die mysqld draaien (en voor jou, omdat je toegang nodig hebt tot het bestand dat je controleert). Als het weigert het bestand te wijzigen, moeten ze ook voor jou schriftelijk zijn. Fase 1: Controleer je tafel Ren myisamchk *. MYI of (myisamchk -e *. MYI, als je meer tijd hebt). Gebruik de -s (stilte) optie om onnodige informatie uit te schakelen.
Het bestandsformaat dat MySQL gebruikt om data op te slaan is uitgebreid getest, maar er zijn altijd externe omstandigheden die kunnen leiden tot corruptie van databasetabellen: Het mysqld-proces wordt in één keer uitgeschakeld; Een onverwachte uitschakeling van de computer (bijvoorbeeld als de computer stroomuitvalt); Een hardwarefout. Dit hoofdstuk beschrijft hoe je datacorruptie in een MySQL-database kunt controleren en ermee omgaat. Als je tafel erg beschadigd is, moet je proberen uit te zoeken waarom! Zie G.1 Debugging van een MySQL-server. Bij het uitvoeren van crashherstel is het belangrijk te begrijpen dat elke tabel in een database tbl_name overeenkomt met de 3 bestanden in de databasemap |