sql >> Database >  >> RDS >> Mysql

Hoe veelvoorkomende problemen met MySQL-database op te lossen?

Samenvatting: Dit artikel somt enkele veelvoorkomende fouten op die u kunt tegenkomen wanneer een MySQL-tabel beschadigd raakt. Het schetst ook de mogelijke redenen achter de corruptie van de MySQL-databasetabel. Het artikel legt ook uit wat u kunt doen om corrupte tabellen te repareren en hoe MySQL-databaseherstelsoftware van pas kan komen om gegevens in de tabel en alle andere database-objecten te herstellen.

Als gebruiker van een MySQL-database kunt u een van de volgende fouten tegenkomen:

  • "Tabel is gemarkeerd als gecrasht en moet worden gerepareerd"
  • "Tabel is gecrasht en laatste reparatie is mislukt"
  • "Tabel tbl_name bestaat niet"
  • “Onjuist sleutelbestand voor tabel:‘…’. Probeer het te repareren”, enz.

Dit zijn waarschuwingssignalen dat uw MySQL-tabel beschadigd is.

Wat veroorzaakt corruptie in de MySQL-databasetabel?

Hieronder volgen mogelijke redenen die leiden tot corruptie van MySQL-databasetabel:

  • Problemen met het onderliggende platform dat door MySQL wordt gebruikt, inclusief schijfsubsysteem, stuurprogramma's, controllers, enz.
  • Abrupt afsluiten van het systeem of servercrash
  • MySQL-proces wordt afgebroken tijdens het schrijven naar de database
  • Softwarefout of hardwarefout

Als u een van deze MySQL-corruptiefouten tegenkomt, kunnen de gegevens in de tabellen ontoegankelijk worden. Laten we de oplossingen bespreken om de beschadigde tafels te repareren.

Hoe corrigeer je MySQL-databasecorruptiefouten?

Als u een bijgewerkte back-up van uw database hebt, herstelt u de database vanaf een back-up om de ontoegankelijke tabelgegevens te herstellen. Als de back-up niet beschikbaar is, voert u de stappen in de onderstaande volgorde uit om corrupte MySQL-tabellen te herstellen en gegevens te herstellen:

Opmerking: Maak een back-up van uw MySQL-database en tabellen om verdere schade tijdens het reparatie- en herstelproces te voorkomen.

Stap 1:Controleer de tabel op fouten

Eerst moet u de databasetabel controleren op corruptiefouten. U kunt de CONTROLEERTABEL . gebruiken opdracht om corrupte InnoDB- en MyISAM-tabellen te diagnosticeren:

CONTROLEER TABEL tbl_name optie;

Vervang hier 'tbl_name' door de naam van de corrupte databasetabel. En vervang 'optie' door een van deze opties:SNEL, SNEL, MEDIUM, UITGEBREID en GEWIJZIGD.

Optie Beschrijving
SNEL Voert snellere reparatie uit van InnoDB- en MyISAM-tabellen. Slaat het scannen van de rijen over om te zoeken naar onjuiste links
SNEL Controleer alleen MyISAM-tabellen die niet correct zijn gesloten. Niet toepassen op InnoDB-tabellen.
GEWIJZIGD Controleer alleen MyISAM-tabellen die niet zijn gesloten sinds de laatste controle is uitgevoerd. Niet toepassen op InnoDB-tabellen.
MEDIUM Controleer of de verwijderde links geldig zijn door rijen te scannen. Geldt alleen voor MyISAM-tabellen.
UITGEBREID Voert een volledige sleutelzoekopdracht uit voor alle sleutels voor elke rij van de MyISAM-tabel. Het duurt lang om uit te voeren.

Gebruik de volgende opdracht om meer dan één tabel op corruptie te controleren:

CONTROLEER TABEL tbl_name1, tbl_name2, tbl_name 3 optie;

Opmerking: De opdracht CHECK TABLE kan alleen worden gebruikt wanneer het MySQL-proces wordt uitgevoerd. Maar als het proces/de server niet actief is, kunt u het volgende 'myisamchk'-commando gebruiken om MyISAM-tabellen te controleren op corruptie:

mijnisamchk [opties] tbl_name …

Dit commando controleert een enkele tabel.

Voer de volgende opdracht uit om alle tabellen in de MySQL-database op corruptie te controleren:

myisamchk /path/to/datadir/*/*.MYI

Het hulpprogramma myisamchk werkt niet voor InnoDB-tabellen.

Stap 2:Corrupte tabel repareren

Opmerking: De opdracht myisamchk is alleen van toepassing op MyISAM-tabellen en werkt niet voor InnoDB-tabellen. Ga naar stap 3 voor het repareren en herstellen van een Innodb-tabel.

Het hulpprogramma myisamchk kan ook helpen bij het repareren van een corrupte (beschadigde) MyISAM-tabel. Ga als volgt te werk om het hulpprogramma te gebruiken voor het repareren van de beschadigde tafel:

  1. Stop de MySQL-service door te typen:
service mysqld stop

cd /var/lib/mysql

  1. Verander naar de directory waar de database zich bevindt.
cd /var/lib/mysql/table_name

mijnisamchk

  1. Als u een beschadigde tabel wilt repareren, voert u de volgende opdracht uit door TABLE te vervangen door de naam van de tabel die u wilt repareren:
myisamchk –recover
  1. Start uw MySQL-service opnieuw.
service mysqld start

Stap 3:InnoDB-herstel forceren

Om corruptie in InnoDB-tabellen op te lossen, gebruikt u de ‘innodb_force_recovery’ optie. Deze optie dwingt de InnoDB-database-engine op te starten zonder bewerkingen op de achtergrond, waardoor u uw tabellen kunt dumpen.

  1. Open uw MySQL-configuratiebestand (my.cnf) en voeg het volgende toe aan de sectie [mysqld]:
[mysqld]

innodb_force_recovery=1

service mysql opnieuw opstarten

U kunt innodb_force_recovery starten met een waarde van 1 en de waarde indien nodig verhogen. Nadat u het herstel van innodb hebt gestart, start u uw MySQL-server opnieuw op en dumpt u uw tabellen. In sommige situaties kan het echter nodig zijn om de waarde in te stellen op 4 tot 6, wat de gegevens kan beschadigen.

Let op! Als u de tabellen kunt dumpen met een innodb_force_recovery=3 of minder waarde, kunt u het herstelproces veilig uitvoeren. Het instellen van innodb_force_recovery op een waarde groter dan 4 brengt echter een risico op gegevensverlies met zich mee.

  1. Als u uw database kunt starten, voert u de volgende mysqldump-opdracht uit om alle databases naar een SQL-bestand te exporteren (d.w.z. een back-upbestand dat alle instructies bevat om de database te herstellen):
mysqldump –all-databases –add-drop-database –add-drop-table> mijndump.sql
  1. Start de MySQL-service en probeer vervolgens de database met de betrokken tabellen te verwijderen met de opdracht DROP DATABASE. Als u een database niet kunt verwijderen, probeer deze dan handmatig te verwijderen door de onderstaande stappen uit te voeren nadat u de MySQL-server hebt gestopt.
cd /var/lib/mysql

rm -rf

  1. Na het uitvoeren van de bovenstaande opdracht, commentaar geven op de onderstaande regel in de [mysqld] om InnoDB-herstel uit te schakelen:
#innodb_force_recovery=…
  1. Sla alle wijzigingen op die u in het my.cnf-bestand hebt aangebracht en start vervolgens uw server.
service mysqld start
  1. Ty herstelt de database en tabel van de MySQL-dump (back-upbestand) die u in stap 2 hebt gemaakt:
mysql -u gebruiker -p

Als u deze stappen uitvoert, worden de MySQL-database en de bijbehorende tabellen hersteld. Als de gegevens nog steeds ontbreken, moet u professionele MySQL-databasereparatiesoftware gebruiken, zoals Stellar Repair for MySQL om uw database te herstellen en de gegevens te herstellen. De software kan zowel InnoDB- als MyISAM-tabellen repareren, waarbij de gegevens intact blijven. Het ondersteunt het repareren van MySQL-tabellen op zowel Windows- als Linux-systemen.

Conclusie

MySQL-databasetabellen kunnen beschadigd raken door plotselinge systeemuitschakeling, servercrash, hardwarestoringen, bugs in MySQL-code, enz. Corruptie in de MySQL-tabel resulteert in de fouten die in dit artikel worden vermeld. U kunt proberen beschadigde MyISAM-tabellen te repareren met behulp van het hulpprogramma 'myisamchk' of InnoDB-herstel forceren. Het kan echter veel tijd kosten om MyISAM-tabellen te repareren en InnoDB-herstel handmatig uit te voeren. Ook kan het handmatige herstelproces leiden tot gegevensverlies. Een beter alternatief is om Stellar Repair voor MySQL-software te gebruiken. Met de software kunnen zowel MyISAM- als InnoDB-databasetabellen worden gerepareerd zonder wijzigingen aan te brengen in de originele gegevens.


  1. Oracle verbinden met SQL Server vanuit Windows

  2. Verkrijg het aantal dagen tussen twee datums in Oracle, inclusief de datums

  3. Hoe APPROX_COUNT_DISTINCT() werkt in SQL Server

  4. Parallel Go-tests uitgevoerd tegen een PostgreSQL-database die draait op Docker